เจ•เฉเจ†เจฐเจ•เจธ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ…เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ

เจธเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจนเฉˆเจฒเฉ‹, เจ‡เฉฑเจฅเฉ‡ เจ•เฉเจ†เจฐเจ•เจธ เจธเฉ€เจฐเฉ€เจœเจผ เจฆเฉ€ เจคเฉ€เจœเฉ€ เจชเฉ‹เจธเจŸ เจนเฉˆ!

เจ•เฉเจ†เจฐเจ•เจธ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ…เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆ

Java microservices เจฆเจพ เจตเจฟเจ•เจพเจธ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‡เจน เจ…เจ•เจธเจฐ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ—เฉเจฐเจนเจฟเจฃ เจฎเจพเจˆเจ•เจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ ะธ เจฌเจธเฉฐเจค เจฌเฉ‚เจŸ เจตเฉฑเจ–เจฐเฉ‡ เจ…เจคเฉ‡ เจธเฉเจคเฉฐเจคเจฐ API เจนเจจเฅค เจกเจฟเจซเฉŒเจฒเจŸ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจ‰เจนเจจเจพเจ‚ APIs เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ€ เจ‰เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจจเจตเฉ‡เจ‚ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจ…เจคเฉ‡ เจฐเจจเจŸเจพเจˆเจฎ เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจ–เจฃ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเจฎเจพเจ‚ เจฒเฉฑเจ—เจฆเจพ เจนเฉˆเฅค เจ…เฉฑเจœ เจ…เจธเฉ€เจ‚ เจ•เฉเจ เจชเฉเจฐเจธเจฟเฉฑเจง เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฒเจˆ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจธเจชเจฐเจฟเฉฐเจ— API เจ…เจคเฉ‡ เจจเจตเฉ€เจ†เจ‚ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ เจ•เจตเจพเจ•เจฐเจธ.

เจฅเฉ‹เฉœเฉ‡ เจนเฉ‹เจฐ เจตเฉ‡เจฐเจตเฉ‡ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเจ•เฉ‹เจช เจ…เจคเฉ‡ เจตเฉ‡เจฐเจตเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉเจ†เจฐเจ•เจธ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจน เจฆเจฟเจ–เจพเจ‰เจฃ เจฒเจˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจธเจชเจฐเจฟเฉฐเจ— API เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจฐเฉ‹เจœเจผเจพเจจเจพ เจฆเฉ‡ เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆเฅค เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเฉ‹ เจ•เจฟ เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฒเจˆ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจนเจจเฅค

เจ•เฉเจ†เจฐเจ•เจธ เจ•เจฟเจ‰เจ‚? เจธเจญ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ‡เจน เจฒเจพเจˆเจต เจ•เฉ‹เจกเจฟเฉฐเจ— เจนเฉˆ, เจฏเจพเจจเฉ€ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API, เจธเจชเจฐเจฟเฉฐเจ— API เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจœเจพเจตเจพ API เจตเจฟเฉฑเจš เจ•เจฟเจธเฉ‡ เจตเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€ เจฆเฉ€ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจฐเฉ€เจฒเฉ‹เจกเจฟเฉฐเจ—, เจœเฉ‹ เจ•เจฟ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ: mvn quarkus:devเฅค เจฆเฉ‚เจœเจพ, เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจธเจพเจกเฉ‡ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš เจตเจฟเจ…เจ•เจคเฉ€ เจธเฉ‡เจตเจพ (เจœเฉ‹ เจ•เจฟ เจฎเฉ‚เจฒ GraalVM เจšเจฟเฉฑเจคเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจชเจฐเจฟเฉฐเจ—, เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ, เจ…เจคเฉ‡ JPA APIs เจคเฉ‹เจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจตเจฟเฉฑเจš เจ•เฉฐเจชเจพเจˆเจฒ เจ•เจฐเจฆเฉ€ เจนเฉˆ) เจธเจฟเจฐเจซเจผ 0.055 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ RESTful เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจเจ‚เจกเจชเฉเจ†เจ‡เฉฐเจŸ 'เจคเฉ‡ เจฒเจ—เจญเจ— 90 MB RAM (RSS) เจฒเฉˆเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจธเจฆเจพ เจธเฉฐเจ•เจฒเจจ เจ–เฉเจฆ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ: mvn package -Pnative.

เจ…เจธเฉ€เจ‚ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฆเฉ€ เจ‡เจน เจธเจฎเจเจฃ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฌเจพเจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจœเจพเจตเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ‰เจน เจ•เฉเจ†เจฐเจ•เจธ เจตเจฟเฉฑเจš เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจฆเฉ‡ เจจเจพเจฒ เจธเจชเจฐเจฟเฉฐเจ— API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจ•เฉฐเจŸเฉ‡เจจเจฐ เจ…เจคเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ

เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจธเจงเจพเจฐเจจ เจฐเฉฑเจ–เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจฅเฉ‡ เจธเจฎเจฐเจฅเจจ เจฆเฉ‡ เจธเจฟเจฐเจซเจผ เจ‰เฉฑเจš-เจชเฉฑเจงเจฐเฉ€ เจชเจนเจฟเจฒเฉ‚เจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจ•เจฌเจฐเจจเฉ‡เจŸเจฟเจธ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจธเจฎเจเจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค เจ•เฉเจ†เจฐเจ•เจธ เจจเฉ‚เฉฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฒเจˆ เจœเจพเจตเจพ เจธเจŸเฉˆเจ• เจตเจœเฉ‹เจ‚ เจฐเฉฑเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจ‡เจน เจœเจพเจตเจพ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจฆเฉ€ เจ–เจชเจค เจ…เจคเฉ‡ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจธเจฎเฉ‡เจ‚ เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ…เจคเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจนเฉ‹เจธเจŸ 'เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจ˜เจฃเจคเจพ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃ เจ…เจคเฉ‡ เจธเจฎเฉเฉฑเจšเฉ€ เจฒเจพเจ—เจคเจพเจ‚ เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ‰เจฃ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจ•เฉเจ†เจฐเจ•เจธ เจตเฉ€ เจ†เจŸเฉ‹ เจ‰เจคเจชเจพเจฆเจจ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ Kubernetes เจธเจฐเฉ‹เจค เจ…เจคเฉ‡ เจชเฉ‡เจธเจผเจ•เจธเจผเจพเจ‚ เจ—เจพเจˆเจก Kubernetes เจ…เจคเฉ‡ Red Hat OpenShift เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎเจพเจ‚ 'เจคเฉ‡ เจคเฉˆเจจเจพเจคเฉ€ เจฒเจˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, Quarkus เจ†เจชเจฃเฉ‡ เจ†เจช เจนเฉ€ Dockerfile.jvm (JVM เจชเฉˆเจ•เฉ‡เจœเจฟเฉฐเจ—) เจ…เจคเฉ‡ Dockerfile.native (เจจเฉ‡เจŸเจฟเจต เจฌเจพเจˆเจจเจฐเฉ€ เจชเฉˆเจ•เฉ‡เจœเจฟเฉฐเจ—) เจซเจพเจˆเจฒเจพเจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจจเฉ‚เฉฐ เจŸเจพเจฐเจ—เฉ‡เจŸ เจกเจฟเจชเจฒเจพเจ‡เจฎเฉˆเจ‚เจŸ เจตเจพเจคเจพเจตเจฐเจจ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจซเฉ‹เจ•เจธ เจ•เจฐเจ•เฉ‡, เจ•เฉเจ†เจฐเจ•เจธ เจ‰เจนเจจเจพเจ‚ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจœเจพเจตเจพ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฆเฉ‡ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจธเจฎเจพเจจ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจธเจพเจฐเจฃเฉ€ 1 เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ…เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจ†เจฎ เจœเจพเจตเจพ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจตเจฟเจšเจ•เจพเจฐ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจชเฉฑเจคเจฐ เจตเจฟเจนเจพเจฐ เจฆเจพ เจจเจ•เจธเจผเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจธเจพเจฐเจฃเฉ€ 1. เจœเจพเจตเจพ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจ…เจคเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเจšเจ•เจพเจฐ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจชเฉฑเจคเจฐ เจตเจฟเจนเจพเจฐ เจฆเจพ เจจเจ•เจธเจผเจพเฅค

เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ
เจฐเจตเจพเจ‡เจคเฉ€ เจฌเจธเฉฐเจค เจฌเฉ‚เจŸ
เจ•เจฌเจฐเจจเฉ‡เจŸเจฟเจธ

เจธเฉ‡เจตเจพ เจ–เฉ‹เจœ
เจฏเจฐเฉ€เจ•เจพ
DNS เจจเฉ‚เฉฐ

เจธเฉฐเจฐเจšเจจเจพ
เจฌเจธเฉฐเจค เจ•เจฒเจพเจ‰เจก เจธเฉฐเจฐเจšเจจเจพ
เจธเฉฐเจฐเจšเจจเจพ เจจเจ•เจธเจผเฉ‡/เจญเฉ‡เจฆ

เจฒเฉ‹เจก เจฌเฉˆเจฒเจธเจฟเฉฐเจ—
เจฐเจฟเจฌเจจ (เจ—เจพเจนเจ• เจชเจพเจธเฉ‡)
เจธเฉ‡เจตเจพ, เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ เจ•เฉฐเจŸเจฐเฉ‹เจฒเจฐ (เจธเจฐเจตเจฐ เจธเจพเจˆเจก)

เจ‰เจฆเจพเจนเจฐเจจ เจคเฉ‹เจ‚ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจšเจฒเจพเจ‰เจฃเจพ

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš เจ…เจธเฉ€เจ‚ เจœเจผเจฟเจ•เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ‰เจฆเจพเจนเจฐเจจ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ, เจœเจฟเฉฑเจฅเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจ…เจคเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‹เจ‚ เจคเฉฑเจ• เจ•เจฟ เจ‡เฉฑเจ•เฉ‹ เจœเจพเจตเจพ เจ•เจฒเจพเจธ เจ‡เจ•เฉฑเจ เฉ‡ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจคเฉ‹เจ‚ เจ•เฉฐเจชเจพเจ‡เจฒ เจ…เจคเฉ‡ เจšเจฒเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจตเฉ‡เจฐเจตเจฟเจ†เจ‚ เจฒเจˆ README.md เจซเจพเจˆเจฒ เจตเฉ‡เจ–เฉ‹เฅค

เจธเจชเจฐเจฟเฉฐเจ— เจซเจฐเฉ‡เจฎเจตเจฐเจ• APIs

เจจเจฟเจฐเจญเจฐเจคเจพ เจŸเฉ€เจ•เจพ

เจ•เฉเจ†เจฐเจ•เจธ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ€เจฎเจพ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจธเฉฐเจฆเจฐเจญ เจ…เจคเฉ‡ เจจเจฟเจฐเจญเจฐเจคเจพ เจ‡เฉฐเจœเฉˆเจ•เจธเจผเจจ (CDI) APIs เจ…เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจชเฉˆเจ‚เจกเฉˆเจ‚เจธเฉ€ เจ‡เฉฐเจœเฉˆเจ•เจธเจผเจจ (เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ€เจ†เจˆ) APIsเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹, เจœเจพเจตเจพ EE เจ…เจคเฉ‡ เจœเจ•เจพเจฐเจคเจพ EE, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ CDI เจคเฉ‹เจ‚ เจฌเจนเฉเจค เจœเจพเจฃเฉ‚ เจนเฉ‹เฅค เจฆเฉ‚เจœเฉ‡ เจชเจพเจธเฉ‡, เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐ เจธเจชเจฐเจฟเฉฐเจ— DI เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจธเจชเจฐเจฟเฉฐเจ— DI API เจฒเจˆ เจ•เฉเจ†เจฐเจ•เจธ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจธเจฎเจฐเจฅเจฟเจค Spring DI API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 2 เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจเฅค

ะ’ เจธเจพเจกเฉ‡ เจ‰เจฆเจพเจนเจฐเจฃ เจคเฉ‹เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ CDI เจ…เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจชเฉˆเจ‚เจกเฉˆเจ‚เจธเฉ€ เจ‡เฉฐเจœเฉˆเจ•เจธเจผเจจ เจฆเฉ‹เจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ…เจคเฉ‡ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจ•เฉเจ†เจฐเจ•เจธ เจ—เจพเจˆเจก เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ, เจœเจฟเจธเจจเฉ‚เฉฐ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจจ เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ€เจ†เจˆ เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 2. เจธเจฎเจฐเจฅเจฟเจค Spring DI API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚เฅค

เจธเจฎเจฐเจฅเจฟเจค เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ€เจ†เจˆ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจฎเจฟเจธเจพเจฒ

เจ•เฉฐเจธเจŸเจฐเจ•เจŸเจฐ เจ‡เฉฐเจœเฉˆเจ•เจธเจผเจจ

public PersonSpringController(
   PersonSpringRepository personRepository,  // injected      
   PersonSpringMPService personService) {    // injected
      this.personRepository = personRepository;
      this.personService = personService;
}

เจซเฉ€เจฒเจก เจ‡เฉฐเจœเฉˆเจ•เจธเจผเจจ
เจ†เจŸเฉ‹เจตเจพเจ‡เจฐเจก
เจฎเฉเฉฑเจฒ

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

@Value("${fallbackSalutation}")
String fallbackSalutation;

เจฌเฉ€เจจ
@เจธเฉฐเจฐเจšเจจเจพ

@Configuration
public class AppConfiguration {
   @Bean(name = "capitalizeFunction")
   public StringFunction capitalizer() {
      return String::toUpperCase;
   }
}

เจญเจพเจ—

@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
   @Override
   public String apply(String s) {
      return s;
   }
}

เจธเฉ‡เจตเจพ

@Service
public class MessageProducer {
   @Value("${greeting.message}")
   String message;

   public String getPrefix() {
      return message;
   }
}

เจตเฉˆเฉฑเจฌ เจซเจฐเฉ‡เจฎเจตเจฐเจ•

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจชเจธเฉฐเจฆ เจ•เจฐเจจเจ—เฉ‡ เจ•เจฟ Quarkus JAX-RS, เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเฉˆเจธเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ, JSON-P, เจ…เจคเฉ‡ JSON-B เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจ‡เจฎเจฐเฉ€ เจตเฉˆเฉฑเจฌ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจฎเจพเจกเจฒ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐ, เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡ REST เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธเจพเจ‚ เจตเจฟเฉฑเจš, Spring Web API เจฒเจˆ เจ•เฉเจ†เจฐเจ•เจธ เจฆเฉ‡ เจนเจพเจฒเฉ€เจ† เจธเจฎเจฐเจฅเจจ เจคเฉ‹เจ‚ เจ–เฉเจธเจผ เจนเฉ‹เจฃเจ—เฉ‡เฅค เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ€เจ†เจˆ เจฆเฉ€ เจคเจฐเฉเจนเจพเจ‚, เจธเจชเจฐเจฟเฉฐเจ— เจตเฉˆเฉฑเจฌ API เจธเจนเจพเจ‡เจคเจพ เจฆเจพ เจฎเฉเฉฑเจ– เจŸเฉ€เจšเจพ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจฆเฉ‡ เจจเจพเจฒ เจธเจชเจฐเจฟเฉฐเจ— เจตเฉˆเฉฑเจฌ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆเฅค เจธเจฎเจฐเจฅเจฟเจค เจธเจชเจฐเจฟเฉฐเจ— เจตเฉˆเฉฑเจฌ APIs เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 3 เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ, เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ…เจคเฉ‡ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉเจ†เจฐเจ•เจธ เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒ เจตเจฟเฉฑเจš เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจฌเจธเฉฐเจค เจตเฉˆเฉฑเจฌ เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 3. เจธเจฎเจฐเจฅเจฟเจค เจธเจชเจฐเจฟเฉฐเจ— เจตเฉˆเฉฑเจฌ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚เฅค

เจธเจฎเจฐเจฅเจฟเจค เจฌเจธเฉฐเจค เจตเฉˆเฉฑเจฌ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจฎเจฟเจธเจพเจฒ

@RestController
@RequestMapping

@RestController
@RequestMapping("/person")
public class PersonSpringController {
   ...
   ...
   ...
}

@GetMapping
@เจชเฉ‹เจธเจŸเจฎเฉˆเจชเจฟเฉฐเจ—
@เจชเฉเจŸเจฎเฉˆเจชเจฟเฉฐเจ—
@DeleteMapping
@เจชเฉˆเจšเจฎเฉˆเจชเจฟเฉฐเจ—
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (เจ…เฉฐเจธเจผเจ•)

@GetMapping(path = "/greet/{id}",
   produces = "text/plain")
   public String greetPerson(
   @PathVariable(name = "id") long id) {
   ...
   ...
   ...
}

เจฌเจธเฉฐเจค เจกเจพเจŸเจพ JPA

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ‡เจธ เจ—เฉฑเจฒ เจฆเฉ€ เจตเฉ€ เจชเฉเจฐเจธเจผเฉฐเจธเจพ เจ•เจฐเจจเจ—เฉ‡ เจ•เจฟ เจ•เฉเจ†เจฐเจ•เจธ เจนเจพเจˆเจฌเจฐเจจเฉ‡เจŸ ORM เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ JPA เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจฒเจˆ เจตเฉ€ เจšเฉฐเจ—เฉ€ เจ–เจผเจฌเจฐ เจนเฉˆ: เจ•เฉเจ†เจฐเจ•เจธ เจ†เจฎ เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ‡เจŸเจพ JPA เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจเจพเจ‚ เจ…เจคเฉ‡ เจ•เจฟเจธเจฎเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจฎเจฐเจฅเจฟเจค เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ‡เจŸเจพ JPA API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 4 เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจเฅค
ะ’ เจธเจพเจกเฉ‡ เจ‰เจฆเจพเจนเจฐเจฃ เจคเฉ‹เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ‡เจŸเจพ JPA APIs เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ•เฉเจ†เจฐเจ•เจธ เจŸเจฟเจŠเจŸเฉ‹เจฐเจฟเจ…เจฒ เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเฉˆ เจœเจฟเจธเจจเฉ‚เฉฐ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจจ เจฌเจธเฉฐเจค เจกเจพเจŸเจพ JPA เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 4. เจธเจฎเจฐเจฅเจฟเจค เจธเจชเจฐเจฟเฉฐเจ— เจกเฉ‡เจŸเจพ JPA API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚เฅค

เจธเจฎเจฐเจฅเจฟเจค เจฌเจธเฉฐเจค เจกเจพเจŸเจพ JPA เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจฎเจฟเจธเจพเจฒ

CrudRepository

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€
JpaRepository
เจชเฉ‡เจœเจฟเฉฐเจ— เจ…เจคเฉ‡ เจธเฉŒเจฐเจŸเจฟเฉฐเจ— เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€

public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}

เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเฉ‡ เจŸเฉเจ•เฉœเฉ‡

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

เจชเฉเจฐเจพเจชเจค เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจตเจฟเจงเฉ€เจ†เจ‚

public interface PersonRepository extends CrudRepository {

    List findByName(String name);
    
    Person findByNameBySsn(String ssn);
    
    Optional 
       findByNameBySsnIgnoreCase(String ssn);

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}

เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉเจ†เจฐเจพ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจธเจตเจพเจฒ

public interface MovieRepository
         extends CrudRepository {

    Movie findFirstByOrderByDurationDesc();

    @Query("select m from Movie m where m.rating = ?1")
    Iterator findByRating(String rating);

    @Query("from Movie where title = ?1")
    Movie findByTitle(String title);
}

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API

เจจเฉเจ•เจธ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ

เจ•เฉˆเจธเจ•เฉ‡เจกเจฟเฉฐเจ— เจ…เจธเจซเจฒเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจ…เจคเฉ‡ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจจเฉเจ•เจธ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจจเจฟเจฐเจฎเจพเจฃ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเจจเฅค เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ•เจˆ เจธเจพเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจจเฉเจ•เจธ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจฒเจˆ เจธเจฐเจ•เจŸ-เจฌเฉเจฐเฉ‡เจ•เจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจจ. เจนเจพเจˆเจธเจŸเฉเจฐเจฟเจ•เจธ. เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจนเจพเจˆเจธเจŸเฉเจฐเจฟเจ•เจธ เจจเฉ‚เฉฐ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ…เจชเจกเฉ‡เจŸ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจชเจฐ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฆเฉ€ เจซเจพเจฒเจŸ เจŸเฉ‹เจฒเจฐเฉˆเจ‚เจธ เจนเฉเจฃ เจธเจฐเจ—เจฐเจฎเฉ€ เจจเจพเจฒ เจตเจฟเจ•เจธเจค เจนเฉ‹ เจฐเจนเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจ•เจˆ เจธเจพเจฒเจพเจ‚ เจฆเฉ€ เจ‰เจคเจชเจพเจฆเจจ เจตเจฐเจคเฉ‹เจ‚ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจ•เฉเจ†เจฐเจ•เจธ เจตเจฟเฉฑเจš เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ—เจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเจจ เจฒเจˆ, เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจซเจพเจฒเจŸ เจŸเฉ‹เจฒเจฐเฉˆเจ‚เจธ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจœเจฟเจธ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 5 เจตเจฟเฉฑเจš เจตเจฐเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจเฅค เจ‡เจธ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจˆ, เจ•เฉเจ†เจฐเจ•เจธ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจฆเฉ‡เจ–เฉ‹เฅค เจจเฉเจ•เจธ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 5. เจธเจฎเจฐเจฅเจฟเจค เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจซเจพเจฒเจŸ เจŸเฉ‹เจฒเจฐเฉˆเจ‚เจธ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚เฅค

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจซเจพเจฒเจŸ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจตเฉ‡เจฐเจตเจพ
เจฎเจฟเจธเจพเจฒ

@เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ

เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจฅเฉเจฐเฉˆเจก เจตเจฟเฉฑเจš เจคเจฐเจ• เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจพ

@Asynchronous
@Retry
public Future<String> getSalutation() {
   ...
   return future;
}

@เจฌเฉเจฒเจ•เจนเฉˆเฉฑเจก

เจธเจฎเจ•เจพเจฒเฉ€ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจจเฉ‚เฉฐ เจธเฉ€เจฎเจค เจ•เจฐเฉ‹

@Bulkhead(5)
public void fiveConcurrent() {
   makeRemoteCall(); //...
}

@เจธเจฐเจ•เจŸเจฌเฉเจฐเฉ‡เจ•เจฐ

เจธเจฎเจพเจฐเจŸ เจ…เจธเจซเจฒเจคเจพ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฃเจพ เจ…เจคเฉ‡ เจ…เจธเจซเจฒเจคเจพเจตเจพเจ‚ เจคเฉ‹เจ‚ เจฐเจฟเจ•เจตเจฐเฉ€

@CircuitBreaker(delay=500   // milliseconds
   failureRatio = .75,
   requestVolumeThreshold = 20,
   successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

@เจชเจฟเฉฑเจ›เฉ‡ เจนเฉฑเจŸเจฃเจพ

เจ…เจธเจซเจฒเจคเจพ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจตเจฟเจ•เจฒเจชเจ• เจคเจฐเจ• เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจเจพ

@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

public String fallback() {
   return "hello";
}

เจฆเฉเจฌเจพเจฐเจพ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹

เจฌเฉ‡เจจเจคเฉ€ เจ…เจธเจซเจฒ เจนเฉ‹เจฃ 'เจคเฉ‡ เจฆเฉเจฌเจพเจฐเจพ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹

@Retry(maxRetries=3)
public String getSalutation() {
   makeRemoteCall(); //...
}

เจธเจฎเจพเจ‚ เจ–เจผเจคเจฎ

เจ…เจธเจซเจฒเจคเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฎเจพเจ‚ เจธเจฎเจพเจชเจค

@Timeout(value = 500 )   // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

เจœเจพเจ‚เจš เจธเฉ‡เจตเจพเจตเจพเจ‚ (เจธเฉ‡เจตเจพ เจธเจฟเจนเจค)

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจฆเฉ€ เจธเจฟเจนเจค เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ…เฉฐเจกเจฐเจฒเจพเจˆเฉฐเจ— เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจจเฉ‚เฉฐ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจฃ เจฒเจˆ, เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ•เจธเจŸเจฎ เจนเฉˆเจฒเจฅ เจ‡เฉฐเจกเฉ€เจ•เฉ‡เจŸเจฐ เจ…เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจฌเฉ‚เจŸ เจเจ•เจŸเฉ‚เจเจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ•เฉเจ†เจฐเจ•เจธ เจตเจฟเฉฑเจš, เจ‡เจน เจฎเจพเจˆเจ•เจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจนเฉˆเจฒเจฅ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเฉ‹ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจœเฉ€เจตเจฟเจคเจคเจพ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจœเฉ€เจตเจฃเจคเจพ เจ…เจคเฉ‡ เจคเจฟเจ†เจฐเฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจธเจฎเจฐเจฅเจฟเจค เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจนเฉˆเจฒเจฅ เจเจชเฉ€เจ†เจˆ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 6 เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ, เจ…เจคเฉ‡ เจ•เฉเจ†เจฐเจ•เจธ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจตเจฟเฉฑเจš เจตเจพเจงเฉ‚ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆเฅค เจธเจฟเจนเจค เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 6: เจธเจฎเจฐเจฅเจฟเจค เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจนเฉˆเจฒเจฅ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚เฅค

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจธเจฟเจนเจค เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจตเฉ‡เจฐเจตเจพ
เจฎเจฟเจธเจพเจฒ

@เจœเฉ€เจตเจจเจคเจพ

เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจฐเฉ€เจฌเฉ‚เจŸ เจ…เจธเจซเจฒ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจˆเจœเจผเจก เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚
เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚:
เจนเฉ‹เจธเจŸ: 8080/เจธเจฟเจนเจค/เจฒเจพเจˆเจต

@Liveness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(ready ? true:false)
     .withData("mydata", data)
     .build();  
}

@เจชเฉœเจคเจพเจฒ

เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจˆเจœเจผเจก เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจจเฉ‚เฉฐ เจŸเฉเจฐเฉˆเจซเจฟเจ• เจจเจนเฉ€เจ‚ เจญเฉ‡เจœเฉ‡เจ—เจพ เจœเฉ‡เจ•เจฐ เจ‡เจน เจคเจฟเจ†เจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ
เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚:
เจฎเฉ‡เจœเจผเจฌเจพเจจ: 8080/เจธเจฟเจนเจค/เจคเจฟเจ†เจฐ

@Readiness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(live ? true:false)
     .withData("mydata", data)
     .build();  
}

เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจœเจพเจ‚ เจคเจพเจ‚ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจ‰เจฆเฉ‡เจธเจผเจพเจ‚ (เจชเฉเจฐเจฆเจฐเจธเจผเจจ SLAs เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจจ เจฒเจˆ) เจœเจพเจ‚ เจ—เฉˆเจฐ-เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจ‰เจฆเฉ‡เจธเจผเจพเจ‚ (เจ•เจพเจฐเฉ‹เจฌเจพเจฐเฉ€ SLAs) เจฒเจˆ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจเฅค เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐ เจธเจชเจฐเจฟเฉฐเจ— เจฌเฉ‚เจŸ เจเจ•เจŸเฉ‚เจเจŸเจฐ เจ…เจคเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจฎเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ•เฉเจ†เจฐเจ•เจธ เจฌเฉ‡เจธเจฒเจพเจˆเจจ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ (เจœเฉ‡เจตเฉ€เจเจฎ เจ…เจคเฉ‡ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ), เจตเจฟเจ•เจฐเฉ‡เจคเจพ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ (เจ•เฉเจ†เจฐเจ•เจธ), เจ…เจคเฉ‡ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ•เจฟ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ JSON เจ…เจคเฉ‡ OpenMetrics (Prometheus) เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจซเจพเจฐเจฎเฉˆเจŸเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 7 เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจเฅค

ะ’ เจธเจพเจกเฉ‡ เจ‰เจฆเจพเจนเจฐเจฃ เจคเฉ‹เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจตเจงเฉ‡เจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฒเจˆ, เจ•เฉเจ†เจฐเจ•เจธ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจฆเฉ‡เจ–เฉ‹ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 7. เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚เฅค

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจตเฉ‡เจฐเจตเจพ
เจฎเจฟเจธเจพเจฒ

@เจ—เจฟเจฃเจฟเจ† เจ—เจฟเจ†

เจ‡เฉฑเจ• เจ•เจพเจŠเจ‚เจŸเจฐ เจ•เจพเจŠเจ‚เจŸเจฐ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ•เจฟเจธเฉ‡ เจเจจเฉ‹เจŸเฉ‡เจŸเจฟเจก เจตเจธเจคเฉ‚ เจจเฉ‚เฉฐ เจฌเฉเจฒเจพเจ เจœเจพเจฃ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ

@Counted(name = "fallbackCounter", 
  displayName = "Fallback Counter", 
  description = "Fallback Counter")
public String salutationFallback() {
   return fallbackSalutation;
}

@ConcurrentGauge

เจ‡เฉฑเจ• เจ—เฉ‡เจœ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจเจจเฉ‹เจŸเฉ‡เจŸเจฟเจก เจตเจธเจคเฉ‚ เจจเฉ‚เฉฐ เจธเจฎเจ•เจพเจฒเฉ€ เจ•เจพเจฒเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ—เจฟเจฃเจฆเจพ เจนเฉˆ

@ConcurrentGuage(
  name = "fallbackConcurrentGauge", 
  displayName="Fallback Concurrent", 
  description="Fallback Concurrent")
public String salutationFallback() {
   return fallbackSalutation;
}

@เจ—เฉ‡เจœ

เจ‡เฉฑเจ• เจ—เฉ‡เจœ เจธเฉˆเจ‚เจธเจฐ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจเจจเฉ‹เจŸเฉ‡เจŸเจฟเจก เจตเจธเจคเฉ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ เจฎเจพเจชเจฆเจพ เจนเฉˆ

@Metered(name = "FallbackGauge",
   displayName="Fallback Gauge",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

@เจฎเฉ€เจŸเจฐเจก

เจ‡เฉฑเจ• เจฎเฉ€เจŸเจฐ เจธเฉˆเจ‚เจธเจฐ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจเจจเฉ‹เจŸเฉ‡เจŸเจฟเจก เจตเจธเจคเฉ‚ เจฆเฉ€ เจ•เจพเจฒ เจฌเจพเจฐเฉฐเจฌเจพเจฐเจคเจพ เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ

@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

เจฎเฉ€เจŸเจฐเจฟเจ•

เจ‡เฉฑเจ• เจเจจเฉ‹เจŸเฉ‡เจธเจผเจจ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฎเฉˆเจŸเจพเจกเฉ‡เจŸเจพ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเฉˆเจŸเฉเจฐเจฟเจ• เจฆเจพเจ–เจฒ เจ•เจฐเจจ เจœเจพเจ‚ เจชเฉˆเจฆเจพ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจฌเฉ‡เจจเจคเฉ€ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ

@Metric
@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

เจธเจฎเฉ‡เจ‚ เจธเจฟเจฐ

เจ‡เฉฑเจ• เจŸเจพเจˆเจฎเจฐ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจเจจเฉ‹เจŸเฉ‡เจŸเจฟเจก เจตเจธเจคเฉ‚ เจฆเฉ€ เจฎเจฟเจ†เจฆ เจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ• เจ•เจฐเจฆเจพ เจนเฉˆ

@Timed(name = "TimedFallback",
   displayName="Timed Fallback",
   description="Fallback delay")
public String salutationFallback() {
   return fallbackSalutation;
}

เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ:8080/เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ/เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ
เจฎเฉ‚เจฒ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ:8080/เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ/เจฌเฉ‡เจธ
เจตเจฟเจ•เจฐเฉ‡เจคเจพ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ:8080/เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ/เจตเจฟเจ•เจฐเฉ‡เจคเจพ
เจธเจพเจฐเฉ‡ เจฎเจพเจชเจ• เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ:8080/เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเฉˆเจธเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ

เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผ เจ…เจ•เจธเจฐ เจ†เจฐเจพเจฎเจฆเจพเจ‡เจ• เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เจฒเจพเจ‡เฉฐเจŸ API เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค RESTful เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ, เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ RestTemplate เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ•เฉเจ†เจฐเจ•เจธ เจ‡เจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเฉˆเจธเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ API เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเจฟเจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจธเจพเจฐเจฃเฉ€ 8 เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจเฅค

ะ’ เจธเจพเจกเฉ‡ เจ‰เจฆเจพเจนเจฐเจฃ เจคเฉ‹เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ RESTful เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเฉˆเจธเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ…เจคเฉ‡ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจ•เฉเจ†เจฐเจ•เจธ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจตเจฟเฉฑเจš เจฎเจฟเจฒ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ เจฌเจพเจ•เฉ€ เจ—เจพเจนเจ• เจ—เจพเจˆเจก.

เจธเจพเจฐเจฃเฉ€ 8. เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเฉˆเจธเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚เฅค

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจฐเฉˆเจธเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚
เจตเฉ‡เจฐเจตเจพ
เจฎเจฟเจธเจพเจฒ

@RegisterRestClient

เจ‡เฉฑเจ• เจŸเจพเจˆเจช เจ•เฉ€เจคเฉ‡ Java เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• REST เจ•เจฒเจพเจ‡เฉฐเจŸ เจตเจœเฉ‹เจ‚ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ

@RegisterRestClient
@Path("/")
public interface MyRestClient {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getSalutation();
}

@RestClient

เจŸเจพเจˆเจช เจ•เฉ€เจคเฉ‡ REST เจ•เจฒเจพเจ‡เฉฐเจŸ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจจเจฟเจธเจผเจพเจจเจฆเฉ‡เจนเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ

@Autowired // or @Inject
@RestClient
MyRestClient restClient;

เจธเฉฑเจฆเจพ

เจ‡เฉฑเจ• REST เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ

System.out.println(
   restClient.getSalutation());

mp- rest/url

REST เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ

application.properties:
org.example.MyRestClient/mp-rest/url=
   http://localhost:8081/myendpoint

เจจเจคเฉ€เจœเฉ‡

เจ‡เจธ เจฌเจฒเฉŒเจ— เจตเจฟเฉฑเจš, เจฎเฉเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจชเจฐเจฟเฉฐเจ— เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจพเจจเจพ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจœเจพเจตเจพ เจฎเจพเจˆเจ•เฉเจฐเฉ‹ เจธเจฐเจตเจฟเจธเจฟเจœเจผ เจจเฉ‚เฉฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจฒเจˆ เจ•เฉเจ†เจฐเจ•เจธ เจตเจฟเฉฑเจš เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจฆเฉ‡ เจจเจพเจฒ เจธเจชเจฐเจฟเฉฐเจ— API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเฉ€เจ เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฎเฉ‚เจฒ เจฌเจพเจˆเจจเจฐเฉ€ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเฉ‹ เจœเฉ‹ เจธเฉˆเจ‚เจ•เฉœเฉ‡ เจฎเฉˆเจ—เจพเจฌเจพเจˆเจŸ RAM เจฆเฉ€ เจฌเจšเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจตเจฟเฉฑเจš เจฒเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเจฟเจฒเฉ€เจธเจ•เจฟเฉฐเจŸ เจฆเฉ€ เจ—เฉฑเจฒ เจนเฉˆเฅค

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจธเจฎเจ เจ—เจ เจนเฉ‹, เจธเจชเจฐเจฟเฉฐเจ— เจ…เจคเฉ‡ เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ API เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€, เจ…เจคเฉ‡ เจจเจพเจฒ เจนเฉ€ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจนเฉ‹เจฐ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€, เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ เจ•เฉเจ†เจฐเจ•เจธ เจฎเฉˆเจจเฉ‚เจ…เจฒ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹