REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เชนเซ‡ เชนเชฌเชฐ! เชนเซเช‚ เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชชเชฐ เชฒเซ‡เช–เชจเซ‹ เช…เชจเซเชตเชพเชฆ เชฐเชœเซ‚ เช•เชฐเซเช‚ เช›เซเช‚ "เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชธเชฐเชณ REST-เช†เชงเชพเชฐเชฟเชค เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชคเชฐเซ€เช•เซ‡ (เชœเชพเชตเชพเชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ) เช•เซ‡เชฎเซเช‚เชกเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹" เชฌเชฐเซเชจเซเชก เชฐเช•เชฐ เชฆเซเชตเชพเชฐเชพ.

07.07.2020/XNUMX/XNUMX, เช…เชจเซเชตเชพเชฆ เชฒเซ‡เช– เชฌเชฐเซเชจเซเชก เชฐเช•เชฐ

REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เชนเซเช‚ เช˜เชฃเซ€เชตเชพเชฐ เชฌเชฟเชจ-เชœเชพเชตเชพ เชฒเซ‹เช•เซ‹ เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซเช‚ เช›เซเช‚: C# เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“, Node.JS/JavaScript เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“, เช…เชฅเชตเชพ Golang aficionados. เชคเซ‡ เชฌเชงเชพเชจเซ‡ เช เชนเช•เซ€เช•เชคเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡ เช•เซ‡ เชคเซ‡เชฎเชจเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชฎเชพเช‚ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชฅเชตเชพ เชซเช•เซเชค เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเซ‡ เชธเซเชตเซเชฏเชตเชธเซเชฅเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เช“เชฐเซเชกเชฐ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ, เชธเชฎเชฏ เชธเชฎเชพเชชเซเชคเชฟ, เชธเชพเช—เชพ เช…เชจเซ‡ เชตเชณเชคเชฐ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เช•เซเชทเชฎเชคเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชงเชจเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชธเชพเชฅเซ‡ BPM เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช•เชฎเซเชจเซเชกเชพ เชคเชฐเชซเชฅเซ€ เช“เชชเชจ เชธเซ‹เชฐเซเชธ เช†เชตเชพ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชธเชฐเชธ. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชฎเชฟเชคเซเชฐเชคเชพ เช เช‰เชคเซเชชเชพเชฆเชจเชจเซ€ เชฎเซเช–เซเชฏ เชฒเชพเช•เซเชทเชฃเชฟเช•เชคเชพเช“เชฎเชพเช‚เชจเซ€ เชเช• เช›เซ‡. เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเชฐ เชจเชœเชฐ เชจเชพเช–เซ‹, เชคเซ‹ เชคเชฎเชจเซ‡ เชเชตเซ€ เช›เชพเชช เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎเซเช‚เชกเชพเชจเซ€ "เชฎเชฟเชคเซเชฐเชคเชพ" เชฎเซเช–เซเชฏเชคเซเชตเซ‡ เชœเชพเชตเชพ เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชฎเชพเชŸเซ‡ เช›เซ‡. เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชคเชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ เช•เชพเชฐเซเชฏเซ‹ เช…เชจเซ‡ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชฌเชงเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฌเชงเซเช‚ เชœเชพเชตเชพเชฎเชพเช‚ เชฅเชพเชฏ เช›เซ‡. เชคเซ‡ เช–เชฐเซ‡เช–เชฐ เช›เซ‡?

เชจเชพ! เชตเชพเชธเซเชคเชตเชฎเชพเช‚, เชคเชฎเซ‡ เช•เซ‹เชˆเชชเชฃ เชœเชพเชตเชพ เชœเซเชžเชพเชจ เชตเชฟเชจเชพ เชธเชฐเชณเชคเชพเชฅเซ€ เช•เซ‡เชฎเซเช‚เชกเชพ เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชธเช‚เชฆเช—เซ€เชจเซ€ เช•เซ‹เชˆเชชเชฃ เชญเชพเชทเชพเชฎเชพเช‚ เช•เซ‹เชก เชฎเชพเชŸเซ‡ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เชœเซ‹เชˆเชถเซเช‚:

  • เชฎเซ‚เชณเชญเซ‚เชค เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ;
  • REST API
  • เชœเชพเชตเชพ เชธเชฟเชตเชพเชฏเชจเซ€ เชญเชพเชทเชพเช“ เชฎเชพเชŸเซ‡ เชนเชพเชฒเชจเซ€ เช•เซเชฒเชพเชฏเช‚เชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“ เชชเชฐ เชธเชฒเชพเชน;
  • C# เช…เชจเซ‡ Node.JS เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‰เชฆเชพเชนเชฐเชฃ;
  • เช•เซ‡เชฎเซเช‚เชกเชพ เชธเชฐเซเชตเชฐ (เชกเซ‹เช•เชฐ เช…เชฅเชตเชพ เชŸเซ‹เชฎเช•เซ‡เชŸ) เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชฐเซ€เชคเซ‹.

เชธเซเชฅเชพเชชเชคเซเชฏ

Camunda Java เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชพเชตเชพ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ (JVM) เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. Camunda เชเช• REST API เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เช—เชฎเซ‡ เชคเซ‡ เชญเชพเชทเชพเชฎเชพเช‚ เชฒเช–เชตเชพ เช…เชจเซ‡ Camunda เชธเชพเชฅเซ‡ REST เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡:

REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เช•เชพเชฎเซเช‚เชกเชพเชฎเชพเช‚ เชตเชฐเซเช•เชซเซเชฒเซ‹เชจเซ‡ BPMN เชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ XML เชซเชพเช‡เชฒ เช›เซ‡. เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชฎเซ‹เชกเซ‡เชฒ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช•เซ‡เชฎเซเช‚เชกเชพ เชฎเซ‹เชกเซ‡เชฒเชฐ.

เชชเซเชฐเซ€-เชฌเชฟเชฒเซเชŸ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฎเซเชจเซเชกเชพเชจเซ‡ เชšเชฒเชพเชตเชตเซเช‚

Camunda เชšเชฒเชพเชตเชตเชพเชจเซ‹ เชธเซŒเชฅเซ€ เชธเชนเซ‡เชฒเซ‹ เชฐเชธเซเชคเซ‹ Docker เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡. เช•เชฎเซเชจเซเชกเชพเชจเซ‡ เชฒเซ‰เชจเซเชš เช•เชฐเชตเชพเชจเซ€ เชตเซˆเช•เชฒเซเชชเชฟเช• เชฐเซ€เชคเซ‹ เช† เชฒเซ‡เช–เชฎเชพเช‚ เชชเช›เซ€เชฅเซ€ เชตเชฐเซเชฃเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชซเช•เซเชค เชšเชฒเชพเชตเซ‹:

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

เชคเชฎเชพเชฐเซ‡ Linux, JVM เช…เชฅเชตเชพ Tomcats เชตเชฟเชถเซ‡ เชšเชฟเช‚เชคเชพ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชกเซ‹เช•เชฐเชซเชพเชˆเชฒเซเชธ เช…เชจเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเชฐเซ‚เชฐเซ€ เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“) เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ Github.

เชœเซ‹ เชคเชฎเซ‡ Camunda เชเชจเซเชŸเชฐเชชเซเชฐเชพเช‡เช เชเชกเชฟเชถเชจ เชšเชฒเชพเชตเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹เชต เชคเซ‹ เชคเชฎเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ.

เชœเซ‹ เช•เซ‡, เชกเซ‹เช•เชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎเซเชจเซเชกเชพ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เชเช• เชจเซเช•เชธเชพเชจ เช›เซ‡: เชคเชฎเซ‡ เชŸเซ‹เชฎเช•เซ‡เชŸเชจเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชถเซ‹ เชœเซ‡เชฎเชพเช‚ เชนเช‚เชฎเซ‡เชถเชพ เชจเชตเซ€เชจเชคเชฎ เชซเชฟเช•เซเชธเซ‡เชธ เชถเชพเชฎเซ‡เชฒ เชนเซ‹เชคเซ€ เชจเชฅเซ€. เช†เชจเซ€ เช†เชธเชชเชพเชธ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เช‡เชšเซเช›เชฟเชค เชŸเซ‹เชฎเช•เซ‡เชŸ เชตเชฟเชคเชฐเชฃเชจเชพ เช†เชงเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เชกเซ‹เช•เชฐ เช‡เชฎเซ‡เชœ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹, เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡, เช…เชฅเชตเชพ เชจเซ€เชšเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เช‰เช•เซ‡เชฒเซ‹เชฎเชพเช‚เชฅเซ€ เชเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹.

เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเซ‹เชกเชฒ เชœเชฎเชพเชตเชŸ

เชšเชพเชฒเซ‹ เช•เซเชฒเชพเชธเชฟเช• เชŸเซเชฐเชฟเชช เชฌเซเช•เชฟเช‚เช— เชฎเชพเชŸเซ‡ เชธเชพเช—เชพ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‹เชˆเช เชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชธเชณเช‚เช— เชคเซเชฐเชฃ เช•เซเชฐเชฟเชฏเชพเช“ เชŸเซเชฐเชฟเช—เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹ เช…เชจเซ‡ เชชเช›เซ€เชจเซ€ เชจเชฟเชทเซเชซเชณเชคเชพเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชชเซ‚เชฐเซเชฃ เชฅเชฏเซ‡เชฒเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เชฎเชพเชŸเซ‡ เช†เช•เชฐเซเชทเช• เชตเชณเชคเชฐ เช†เชชเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹. BPMN เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชฐเชœเซ‚ เชฅเชพเชฏ เช›เซ‡, เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เชนเชตเซ‡ เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเซ‹เชกเชฒ เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡ REST API. เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ trip.bpmn เชคเชฐเซ€เช•เซ‡ เชธเชพเชšเชตเซ‹ เช…เชจเซ‡ Docker เชฆเซเชตเชพเชฐเชพ Camunda เชšเชฒเชพเชตเซ‹ เชœเซ‡เชฅเซ€ เชคเซ‡ เชฒเซ‹เช•เชฒเชนเซ‹เชธเซเชŸ: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 เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เชคเซ‡เชฅเซ€ เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ‡ เชเช•เซเชเซ‡เช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ fetchAndLock (เช•เชพเชฐเชฃ เช•เซ‡ เช…เชจเซเชฏ เช•เชพเชฎเชฆเชพเชฐเซ‹ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชฎเชพเชชเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชœ เชธเชฎเชฏเซ‡ เช•เชพเชฐเซเชฏเซ‹ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡):

  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

เชชเช›เซ€ เช•เชฎเซเช‚เชกเชพเชจเซ‡ เช•เชนเซ‡ เช•เชพเชฐเซเชฏเช•เชฐ เช•เชพเชฎ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‡ เช›เซ‡ (เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เชคเชฎเชพเชฐเซ‡ เชชเซเชฐเชฅเชฎ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชชเซเชฐเชพเชชเซเชค เชฌเชพเชนเซเชฏ เช•เชพเชฐเซเชฏ ID เชฆเชพเช–เชฒ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡):

  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 เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เช›เซ‡. JavaScript เชฎเชพเช‚, เช† JQuery เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ C# เชฎเชพเช‚, System.Net.Http เช…เชจเซ‡ Newtonsoft.Json เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฐเชณ เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช†เชฎเชพเช‚ เชธเชฎเชฏ เชฒเชพเช—เชถเซ‡. เชคเซ‡เชฅเซ€ เชคเชฎเซ‡ เชซเช•เซเชค เช…เชฎเซเช• เช•เซเชฒเชพเชฏเช‚เชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เช† เช•เซเชทเชฃเซ‡, เช˜เชฃเซ€ เชคเซˆเชฏเชพเชฐ เช•เซเชฒเชพเชฏเช‚เชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“ เช‰เชชเชฒเชฌเซเชง เช›เซ‡:

  • เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸ: ััั‹ะปะบะฐ. เช•เซ‡เชฎเซเช‚เชกเชพ เชฆเซเชตเชพเชฐเชพ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก;
  • เชœเชพเชตเชพ: ััั‹ะปะบะฐ. เช•เซ‡เชฎเซเช‚เชกเชพ เชฆเซเชตเชพเชฐเชพ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก;
  • เชธเซ€ #:ััั‹ะปะบะฐ ะธ ััั‹ะปะบะฐ. เช† เชฌเช‚เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เช›เซ‡ เช…เชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ€เช• เชฐเซ€เชคเซ‡ เชจเชฟเชทเซเช•เซเชฐเชฟเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชเช• เชธเชพเชฐเชพ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฌเชฟเช‚เชฆเซ เชคเชฐเซ€เช•เซ‡ เชธเซ‡เชตเชพ เช†เชชเซ€ เชถเช•เซ‡ เช›เซ‡;
  • PHP: ััั‹ะปะบะฐ - เช–เซ‚เชฌ เชธเช‚เชชเซ‚เชฐเซเชฃ เชจเชฅเซ€ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชจเชตเซ€เชจเชคเชฎ API เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชถเชพเชฎเซ‡เชฒ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชนเซเช‚ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชจเซ‡ เชœเชพเชฃเซเช‚ เช›เซเช‚.

JavaScript เช…เชจเซ‡ Java เชจเชพ เช…เชชเชตเชพเชฆ เชธเชพเชฅเซ‡, เช•เซเชฒเชพเชฏเชจเซเชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“ เชชเซ‹เชคเซ‡ เช•เซ‡เชฎเชจเซเชกเชพ เชชเซเชฐเซ‹เชกเช•เซเชŸเชจเซ‹ เชญเชพเช— เชจเชฅเซ€. เช…เชชเซ‡เช•เซเชทเชพ เชฐเชพเช–เชถเซ‹ เชจเชนเซ€เช‚ เช•เซ‡ เชคเซ‡เช“ Camunda เชจเซ€ REST API เชธเซเชตเชฟเชงเชพเช“เชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡. เชฎเชพเชคเซเชฐ เช•เชพเชฐเชฃ เช•เซ‡ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชšเซ‹เช•เซเช•เชธ เช•เชพเชฐเซเชฏ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชคเซ€ เชจเชฅเซ€ เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เชจเชฅเซ€ เช•เซ‡ เชคเซ‡ เชคเซเชฏเชพเช‚ เชจเชฅเซ€, เชนเช‚เชฎเซ‡เชถเชพ Camunda เชจเชพ REST API เชคเชชเชพเชธเซ‹. เชธเช‚เชฆเชฐเซเชญ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฌเชฟเช‚เชฆเซ เช…เชจเซ‡ เชจเชฎเซ‚เชจเชพ เชคเชฐเซ€เช•เซ‡ เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.

C# เช‰เชฆเชพเชนเชฐเชฃ

เช‰เชชเชฐเซ‹เช•เซเชค เช•เซเชฒเชพเชฏเช‚เชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชซเช•เซเชค เชฒเช–เซ€ เชถเช•เซ€เช เช›เซ€เช:

  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

เช•เซ‡เชฎเซเช‚เชกเชพ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชจเซ€ เชตเซˆเช•เชฒเซเชชเชฟเช• เชฐเซ€เชคเซ‹

"Camunda เชธเซเชŸเซ‡เชจเซเชกเช…เชฒเซ‹เชจ WAR" เชธเชพเชฅเซ‡ เช•เชธเซเชŸเชฎ เชกเซ‹เช•เชฐ เช›เชฌเซ€

Camunda เชคเชฐเชซเชฅเซ€ เชชเซเชฐเซ€-เชฌเชฟเชฒเซเชŸ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเชจเชพ เชตเชฟเช•เชฒเซเชช เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชœเชพเชคเซ‡ เชŸเซ‹เชฎเช•เซ‡เชŸ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชงเชฟเช•เซƒเชค เชกเซ‹เช•เชฐ เชŸเซ‹เชฎเช•เซ‡เชŸ เชˆเชฎเซ‡เชœเซ‹เชจเชพ เช†เชงเชพเชฐเซ‡) เช…เชจเซ‡ เชชเช›เซ€ เช•เชนเซ‡เชตเชพเชคเซ€ WAR เชซเชพเชˆเชฒเซ‹เชฎเชพเช‚เชฅเซ€ เชเช• เชคเชฐเซ€เช•เซ‡ เชคเซ‡เชฎเชพเช‚ Camunda เชจเซ€ เชจเช•เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช˜เชฃเซ€ เชตเชงเชพเชฐเชพเชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพเช“ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเซ‡ เชœเชพเชตเชพ เชฌเชฟเชฒเซเชก เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เช•เซ‡เชฎเซเช‚เชกเชพ เชธเซเชŸเซ‡เชจเซเชกเช…เชฒเซ‹เชจ เชตเซ‹เชฐ เชชเชฃ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช† เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ€ เชœเซ‡เชฎ เชฎเซ‡เชตเซ‡เชจ เชฌเชฟเชฒเซเชก เชธเซ‡เชŸ เช•เชฐเซ‹: เชฌเชฟเชฒเซเชก เชฏเซเชฆเซเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชธเชพเชฅเซ‡ Maven เช…เชฅเชตเชพ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช“เชตเชฐเชฒเซ‡ เชธเชพเชฅเซ‡ Maven.

Camunda Tomcat เชตเชฟเชคเชฐเชฃ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เช เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎเซเช‚เชกเชพ เชŸเซ‹เชฎเช•เซ‡เชŸ เชกเชฟเชธเซเชŸเซเชฐเชฟเชฌเซเชฏเซเชถเชจ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹, เชคเซ‡เชจเซ‡ เช…เชจเชเชฟเชช เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชšเชฒเชพเชตเซ‹. เช†เชจเซ‡ เชซเช•เซเชค เชคเชฎเชพเชฐเชพ เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชชเชฐ เชœเชพเชตเชพ เชฐเชจเชŸเชพเช‡เชฎ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ (JRE) เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชนเซ€เช‚เชฅเซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹.

REST เช…เชจเซ‡ เชตเชฐเซเช•เชซเซเชฒเซ‹ เชเชจเซเชœเชฟเชจ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเชฐเชณ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชฎเชพเชŸเซ‡ Camunda เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ (เช•เซ‹เชˆ เชœเชพเชตเชพ เชจเชฅเซ€)

เชกเซ‡เชŸเชพเชฌเซ‡เช เชฌเชฆเชฒเชตเชพ เช…เชฅเชตเชพ เชฌเซ€เชœเซเช‚ เช•เช‚เชˆเชชเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชŸเซ‹เชฎเช•เซ‡เชŸเชจเซ€ เชœเซ‡เชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡. เชนเซเช‚ เชœเชพเชฃเซเช‚ เช›เซเช‚ เช•เซ‡ เชŸเซ‹เชฎเช•เซ‡เชŸ เชœเชŸเชฟเชฒ เชฒเชพเช—เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เช–เชฐเซ‡เช–เชฐ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡. เช…เชจเซ‡ Google เช เชฆเชฐเซ‡เช• เชตเชธเซเชคเซเชจเชพ เชœเชตเชพเชฌเซ‹ เชœเชพเชฃเซ‡ เช›เซ‡ เชœเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.

เชŸเซ‹เชฎเช•เซ‡เชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‡เชฎเซเช‚เชกเชพ เชšเชฒเชพเชตเชตเซเช‚

เช›เซ‡เชฒเซเชฒเซ‹ เชตเชฟเช•เชฒเซเชช เช เช›เซ‡ เช•เซ‡ เชŸเซ‹เชฎเช•เซ‡เชŸ เชœเชพเชคเซ‡ เชธเซ‡เชŸ เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช•เชฎเซเช‚เชกเชพ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹, เชธเซเชฅเชพเชชเชจ เชตเชฐเซเชฃเชจเชจเซ‡ เช…เชจเซเชธเชฐเซ€เชจเซ‡. เช† เชคเชฎเชจเซ‡ เชŸเซ‹เชฎเช•เซ‡เชŸเชจเชพ เช•เซ‹เชˆเชชเชฃ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชตเชฟเช•เชฒเซเชช เช†เชชเชถเซ‡, เช…เชฅเชตเชพ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเซ‡เชจเซ‡ Windows เชธเซ‡เชตเชพ เชคเชฐเซ€เช•เซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹.

เช•เชพเชฎเซเชจเซเชกเชพเชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชฒเซ‰เชจเซเชš เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช†เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เซ‡เชฎเซเช‚เชกเชพ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเชพเช• เช…เช‚เชคเชฟเชฎ เชธเซ‡เชŸเช…เชชเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เช•เชฎเซเช‚เชกเชพเชฎเชพเช‚ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพเช“ เช›เซ‡ เชœเซ‡ เช†เชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเซเช‚ เช† เชฒเซ‡เช–เชฎเชพเช‚ เชคเซ‡เชฎเชพเช‚ เชœเชˆเชถ เชจเชนเซ€เช‚ - เชนเซเช‚ เชซเช•เซเชค เชเช• เช‰เชฆเชพเชนเชฐเชฃเชจเซเช‚ เชจเชพเชฎ เช†เชชเซ€เชถ: เชกเชฟเชธเซเชŸเซเชฐเชฟเชฌเซเชฏเซเชถเชจเชจเซเช‚ REST API เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเซ‡เชฒเซเช‚ เชจเชฅเซ€. เชคเชฎเซ‡ เช†เชจเซ‡ เชฌเชฆเชฒเชตเชพ เชฎเชพเช—เซ€ เชถเช•เซ‹ เช›เซ‹.

เชเช•เชคเซเชฐ เช•เชฐเชตเซเช‚

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชคเชฎเซ‡ เช—เชฎเซ‡ เชคเซ‡ เชญเชพเชทเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เชนเซ‹เชต, เช•เซ‡เชฎเชจเซเชกเชพ เชธเชพเชฅเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡. เชฎเซเช–เซเชฏ เชฎเซเชฆเซเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชคเชฎเชพเชฎ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ REST API เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเชฃ เช–เซ‚เชฌ เชธเชฐเชณ เช›เซ‡, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชกเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹