рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдирдорд╕реНрддреЗ, рд╣рдмрд░! рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдБ "рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЬрд╛рд╡рд╛ рдХреЛ рдЫреБрдП рдмрд┐рдирд╛)" рдмрд░реНрдирдб рд░реВрдХрд░ рджреНрд╡рд╛рд░рд╛ред

07.07.2020/XNUMX/XNUMX, рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦ рдмрд░реНрдирдб рд░реВрдХрд░

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдореИрдВ рдЕрдХреНрд╕рд░ рдЧреИрд░-рдЬрд╛рд╡рд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реВрдВ: C#, Node.JS/JavaScript рдбреЗрд╡рд▓рдкрд░реНрд╕, рдпрд╛ рдЧреЛрд▓рд╛рдВрдЧ рдЙрддреНрд╕рд╛рд╣реАред рдЙрди рд╕рднреА рдХреЛ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдПрдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЗрдВрдЬрди рдпрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдСрд░реНрдбрд░ рдХрд░рдиреЗ, рдЯрд╛рдЗрдордЖрдЙрдЯ, рд╕рд╛рдЧрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рд▓реЗрдирджреЗрди рдХреА рднрд░рдкрд╛рдИ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдмреАрдкреАрдПрдо рдордВрдЪ рдХреЗ рд╕рд╛рде рдХреИрдореБрдВрдбрд╛ рд╕реЗ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛. рдбреЗрд╡рд▓рдкрд░ рдорд┐рддреНрд░рддрд╛ рдЙрддреНрдкрд╛рдж рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрдореБрдВрдбрд╛ рдХреА рдорд┐рддреНрд░рддрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдЪреНрдЪреА рдореЗрдВ?

рдирд╣реАрдВ! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрд╛рд╡рд╛ рдЬреНрдЮрд╛рди рдХреЗ рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:

  • рдмреБрдирд┐рдпрд╛рджреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛;
  • рдмрд╛рдХреА рдПрдкреАрдЖрдИ;
  • рдЬрд╛рд╡рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рд╕рд▓рд╛рд╣;
  • C# рдФрд░ Node.JS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг;
  • рдХреИрдореБрдВрдбрд╛ рд╕рд░реНрд╡рд░ (рдбреЙрдХрд░ рдпрд╛ рдЯреЙрдордХреИрдЯ) рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗред

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

рдХреИрдореБрдВрдбрд╛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (JVM) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреИрдореБрдВрдбрд╛ рдПрдХ REST API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдФрд░ рдХреИрдореБрдВрдбрд╛ рдХреЗ рд╕рд╛рде REST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдХреИрдореБрдВрдбрд╛ рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ BPMN рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХреИрдореБрдВрдбрд╛ рдореЙрдбрд▓рд░.

рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрдореБрдВрдбрд╛ рдЪрд▓рд╛рдирд╛

рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╕ рдЪрд▓рд╛рдПрдБ:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

рдЖрдкрдХреЛ Linux, Java рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдпрд╛ Tomcats рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред Dockerfiles рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рджрд╕реНрддрд╛рд╡реЗрдЬ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢) рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ Github.

рдпрджрд┐ рдЖрдк рдХреИрдореБрдВрдбрд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ Dockerfile.

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рд╣реИ: рдЖрдкрдХреЛ рдЯреЙрдордХреИрдЯ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрд╢рд╛ рдирд╡реАрдирддрдо рд╕реБрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕рд╕реЗ рдирд┐рдЬрд╛рдд рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдЯреЙрдордХреИрдЯ рд╡рд┐рддрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдпрдВ рдПрдХ рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбрд▓ рддреИрдирд╛рдд рдХрд░рдирд╛

рдЖрдЗрдП рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдпрд╛рддреНрд░рд╛ рдмреБрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЧрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреАрди рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдлрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреА рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмреАрдкреАрдПрдордПрди рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдЕрдм рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЙрдбрд▓ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП REST API. рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ Trip.bpmn рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рд╣реИ рдФрд░ рдХреИрдореБрдВрдбрд╛ рдХреЛ рдбреЙрдХрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:8080 рдкрд░ рдЙрдкрд▓рдмреНрдз рдерд╛:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

рдЕрдм рдЖрдк рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдирдП рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЙрджрд╛рд╣рд░рдг REST API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рдЖрдк рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  curl 
-H "Content-Type: application/json" 
-X POST 
-d '{"variables":{"someData" : {"value" : "someValue", "type": "String"}},"businessKey" : "12345"}}' 
http://localhost:8080/engine-rest/<!-- -->process-definition/key/<!-- -->FlowingTripBookingSaga<!-- -->/start

рдЕрдЧрд▓рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреИрдореБрдВрдбрд╛ рдХрд╛рд░ рдмреБрдХ рдХрд░рдиреЗ рдЬреИрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ? рдХреИрдореБрдВрдбрд╛ рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рди рдХреЗрд╡рд▓ рддреБрд░рдВрдд рд╕реЗрд╡рд╛рдУрдВ (рдкреБрд╢-рд╕рд┐рджреНрдзрд╛рдВрдд) рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрдиреЗрдХреНрдЯрд░реНрд╕, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрддрд╛рд░ рдореЗрдВ рднреА рд░рдЦреЗрдВред рдлрд┐рд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ REST рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреИрдореБрдВрдбрд╛ (рдкреБрд▓-рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓) рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпреЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдлрд╝реЗрдЪрдПрдВрдбрд▓реЙрдХ (рдЪреВрдВрдХрд┐ рдЕрдиреНрдп рдХрд░реНрдордЪрд╛рд░реА рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123","maxTasks":1,"usePriority":true,"topics":[{"topicName": "reserve-car"}, "lockDuration": 10000, "variables": ["someData"]}]}'<!-- --> 
http://localhost:8080/engine-rest/external-task/fetchAndLock

рдлрд┐рд░ рдХреИрдореБрдВрдбрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рдУ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдЖрдИрдбреА рджрд░реНрдЬ рдХрд░рдиреА рд╣реЛрдЧреА):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

рдмрд╕ рдЗрддрдирд╛ рд╣реА - рдЖрдкрдХреЛ рдЕрдм рддрдХ рдХрд┐рд╕реА рдЬрд╛рд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдкрдбрд╝реА рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдпрд╣ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ!

рдЧреНрд░рд╛рд╣рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп

рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ REST API рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ JQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ C# рдореЗрдВ рдЖрдк System.Net.Http рдФрд░ Newtonsoft.Json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧреЗрдЧрд╛. рддреЛ рдЖрдк рдмрд╕ рдХреБрдЫ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдИ рддреИрдпрд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

  • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рд▓рд┐рдВрдХ. рдХреИрдореБрдВрдбрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд;
  • рдЬрд╛рд╡рд╛: рд▓рд┐рдВрдХ. рдХреИрдореБрдВрдбрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд;
  • рд╕реА #:рд▓рд┐рдВрдХ ╨╕ рд▓рд┐рдВрдХ. рдпреЗ рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ рдФрд░ рд╡рд╕реНрддреБрддрдГ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреНрдЫреЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИрдВ;
  • PHP: рд▓рд┐рдВрдХ рдпрд╣ рдмрд╣реБрдд рд╕рдВрдкреВрд░реНрдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд╡реАрдирддрдо рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреИрдореБрдВрдбрд╛ рдЙрддреНрдкрд╛рдж рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред рдЙрдирд╕реЗ рдХреИрдореБрдВрдбрд╛ рдХреА рд╕рднреА REST API рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рди рдХрд░реЗрдВред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрд╢рд╛ рдХреИрдореБрдВрдбрд╛ рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред

рд╕реА# рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг

рдЙрдкрд░реЛрдХреНрдд рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Deploy the BPMN XML file from the resources
  camunda.RepositoryService.Deploy("trip-booking", new List<object> {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Register workers
  registerWorker("reserve-car", externalTask => {
    // here you can do the real thing! Like a sysout :-)
    Console.WriteLine("Reserving car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Cancelling car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Reserving hotel now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Register more workers...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary<string, object>()
    {
      {"someBookingData", "..." }
    });

рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдСрдирд▓рд╛рдЗрди рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд▓рд┐рдВрдХ. рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рд▓рд┐рдВрдХ.

Node.js рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг

  var Workers = require('camunda-worker-node');
  var workers = Workers('http://localhost:8080/engine-rest', {
    workerId: 'some-worker-id'
  });
  
  workers.registerWorker('reserve-car', [ 'someData' ], function(context, callback) {
    var someNewData = context.variables.someData + " - added something";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ github.com

рдХреИрдореБрдВрдбрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЗ

"рдХреИрдореБрдВрдбрд╛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╡реЙрд░" рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рдбреЙрдХрд░ рдЫрд╡рд┐

рдХреИрдореБрдВрдбрд╛ рд╕реЗ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рд╕реНрд╡рдпрдВ рдЯреЙрдордХреИрдЯ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХрд░ рдЯреЙрдордХреИрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдФрд░ рдлрд┐рд░ рдХреИрдореБрдВрдбрд╛ рдХреЛ рддрдерд╛рдХрдерд┐рдд WAR рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдЖрдк рдЬрд╛рд╡рд╛ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреИрдореБрдВрдбрд╛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдпреБрджреНрдз рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдореЗрд╡реЗрди рдмрд┐рд▓реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ: рдмрд┐рд▓реНрдб рдпреБрджреНрдз рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдореЗрд╡реЗрди рдпрд╛ рдЕрд╕реЗрдВрдмрд▓реА рдУрд╡рд░рд▓реЗ рдХреЗ рд╕рд╛рде рдореЗрд╡реЗрди.

рдХреИрдореБрдВрдбрд╛ рдЯреЙрдордХреИрдЯ рд╡рд┐рддрд░рдг рдХрд╛ рд╢реБрднрд╛рд░рдВрдн

рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рдХреИрдореБрдВрдбрд╛ рдЯреЙрдордХреИрдЯ рд╡рд┐рддрд░рдг рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдЙрд╕реЗ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЬрд╛рд╡рд╛ рд░рдирдЯрд╛рдЗрдо рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ (JRE) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ.

рдЖрд╕рд╛рди REST-рдЖрдзрд╛рд░рд┐рдд рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреИрдореБрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдХреЛрдИ рдЬрд╛рд╡рд╛ рдирд╣реАрдВ)

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЯреЙрдордХреИрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ. рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЯреЙрдордХреИрдЯ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдФрд░ Google рдХреЗ рдкрд╛рд╕ рдЙрд╕ рд╣рд░ рдЪреАрдЬрд╝ рдХреЗ рдЙрддреНрддрд░ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЯреЙрдордХреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдореБрдВрдбрд╛ рдЪрд▓рд╛рдирд╛

рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдЯреЙрдордХреИрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдореЗрдВ рдХреИрдореБрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ, рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рд╡рд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ. рдпрд╣ рдЖрдкрдХреЛ рдЯреЙрдордХреИрдЯ рдХреЗ рдХрд┐рд╕реА рднреА рдкрд╕рдВрджреАрджрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛, рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛ред

рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛

рдЖрдорддреМрд░ рдкрд░, рдХреИрдореБрдВрдбрд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рдЕрдВрддрд┐рдо рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреИрдореБрдВрдбрд╛ рдХреЗ рдкрд╛рд╕ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ - рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛: рд╡рд┐рддрд░рдг рдХрд╛ REST API рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЖрдк рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реЗрдВ.

рд╕рдВрдХреНрд╖реЗрдк

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдХреИрдореБрдВрдбрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЪрд╛рд╣реЗ рдЖрдк рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рд╕рдВрдЪрд╛рд░ REST API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордпред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ