Fosrestbundle: ๊ฒฝ๋กœ์—์„œ REST API ๋ฌธ์„œ ์ƒ์„ฑ

์— ๋งŒ๋“  2011๋…„ 04์›” 20์ผ  ยท  26์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: FriendsOfSymfony/FOSRestBundle

์ •์˜๋œ ๊ฒฝ๋กœ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ทธ ๊ฒฝ๋กœ์—์„œ REST API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(๋ณด๊ธฐ ๊ณ„์ธต ๊ตฌ์„ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ - ํ—ˆ์šฉ๋˜๋Š” ํ˜•์‹)

Enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ์˜ค๋ž˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ Swagger / Openapi์šฉ ํŒจํ‚ค์ง€/๋ฒˆ๋“ค์„ ์ฐพ๋Š” ๋™์•ˆ ๋น„๊ต์  ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ์žฌ๊ณ ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? NelmioApiDocBundle์ด ๋ฒ„๋ ค์ง€๊ณ  Symfony for Swagger/OpenApi(๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  RAML, ...?)์— ํ†ตํ•ฉ๋˜๋Š” ์‹ค์ œ ๋Œ€์•ˆ์„ ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  26 ๋Œ“๊ธ€

์˜๊ฐ์„ ์–ป์œผ๋ ค๋ฉด http://getfrapi.com/ screencast๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ด๋ฏธ ๊ทธ๊ฒƒ์„ ๋ณด์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๋“ค์˜ ์‹คํ˜„์—์„œ ๋งŽ์€ ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ์„ , ๊ทธ๋“ค์˜ REST๋Š” RESTful์ด ์•„๋‹™๋‹ˆ๋‹ค :-D

"์˜๊ฐ"์ด๊ณ  ๋‚˜๋Š” ๊ทธ๋“ค์˜ ํœด์‹์ด ์•„๋‹ˆ๋ผ ๊ทธ๋“ค์˜ ๋ฌธ์„œ(๋ฐ ํ…Œ์ŠคํŠธ) ์„ธ๋Œ€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. :)

๊ฐœ์ธ์ ์œผ๋กœ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์ง€๋งŒ WADL ํ˜•์‹์˜ ๋ฌธ์„œ ์ƒ์„ฑ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

http://www.w3.org/Submission/wadl/

๋ฌธ์„œ ์ปจํŠธ๋กค๋Ÿฌ/๋ทฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋ทฐ ๋„์šฐ๋ฏธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์„ธ๋Œ€๋ณด๋‹ค ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๋” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด FRAPI์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€(์•ฑ์— ๋“œ๋กญ)์— ์ ํ•ฉํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์ด "์žˆ๋Š” ๊ทธ๋Œ€๋กœ" ํ•„์š”ํ•œ์ง€ ๋˜๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ณ ๊ฐ์„ ์œ„ํ•œ ๋ฌธ์„œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด REST๊ฐ€ ํ”ผํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ž„์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. :)

์˜ค๋””๋…ธ: ๋ฌผ๋ก ์ด์ฃ . ๊ทธ๋Ÿฌ๋‚˜ HATEAOS๋ฅผ ๋”ฐ๋ฅด๋”๋ผ๋„ ํ—ค๋”๋ฅผ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•˜์ง€๋งŒ ์–ด๋–ค ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ "๋” ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€"์ง€ ์•„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. API์˜ ์บ์ฃผ์–ผํ•œ ๊ฒ€ํ† ์— ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ฃผ์ œ: ์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋Š” ๋‚˜๋ฌด๋ฅผ ์ฃฝ์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์œผ๋ฉฐ ์ด ํŽ˜์ด์ง€๋ฅผ ์ฑ„์šฐ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. :)

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ผํ•ด์•ผ ํ•  ์œ ์ผํ•œ ๊ฒƒ์€ ์ƒ์„ฑ๋œ ๋ฌธ์„œ์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด WSDL์„ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋ฌด๋ฅผ ์ฃฝ์ด๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์—„์ง€ ์†๊ฐ€๋ฝ์„ ์•„๋ž˜๋กœ ๋‚ด๋ฆฌ์‹ญ์‹œ์˜ค :)

๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, ์ง„์ •ํ•œ REST API ๋ฌธ์„œ๋Š” URL์ด ์•„๋‹ˆ๋ผ ๋ฏธ๋””์–ด ์œ ํ˜•๊ณผ ๊ทธ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ: http://kenai.com/projects/suncloudapis/pages/Home , http://amundsen.com/media-types/collection/

๊ทธ๋Ÿฌ๋‚˜ ์›น ํ”„๋กœ์ ํŠธ์˜ 80%์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ„๋‹จํ•œ HTTP API์˜ ๊ฒฝ์šฐ ์ด ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„ค vladar, URI ํ…œํ”Œ๋ฆฟ์€ ๋ถ„๋ช…ํžˆ ์•…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ REST ๋ฒˆ๋“ค์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์›์น™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

URI ํ…œํ”Œ๋ฆฟ์€ ApiBundle์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

http://swagger.wordnik.com/ ์—์„œ ๊ฐœ๋…์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

:+1: ์Šค์›จ๊ฑฐ๋กœ. ์ด๊ฒƒ์€ ๋ฉ‹์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

์œ ์‚ฌํ•œ ๊ฒฝํ—˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • @apidoc ๋˜๋Š” ๊ธฐํƒ€๋กœ ํ‘œ์‹œ๋œ ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐฉ๋ฒ•
  • @apidoc ํ‘œ์‹œ๋œ ๋ฉ”์†Œ๋“œ์˜ docblock์—์„œ ๋ฉ”์†Œ๋“œ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์„ค๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ
  • ์ž‘์—…๋ณ„๋กœ ํ˜ธ์ถœ์˜ ์ธ๋ผ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ฒด๋กœ Swagger์™€ ๊ฐ™์€ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ฝค ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด ๋ฒˆ๋“ค์— ๋Œ€ํ•ด ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ๋‹จ์ˆœํžˆ Swagger๊ฐ€ ์†Œ๋น„ํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ๊ฐ€์ค‘์น˜(Java)์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” JSON์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐจ๋ผ๋ฆฌ "like" ๊ตฌํ˜„์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ JSON์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฃผ๋ง์— ์กฐ๊ธˆ ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋น ๋ฅธ 'n ๋”๋Ÿฌ์šด ํ”„๋กœํ† ํƒ€์ดํ•‘์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pminnieur ๋Š” ํ†ตํ•ฉ๋ณด๋‹ค๋Š” ๋™์ผํ•œ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ https://github.com/FriendsOfSymfony/FOSJsRoutingBundle ์ฒ˜๋Ÿผ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ‹์ง„ HTML/CSS๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ผ์ข…์˜ API ๋ฌธ์„œ๋กœ RESTful ๊ฒฝ๋กœ๋ฅผ ๋…ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ฃผ์„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ „์šฉ ๋ฒˆ๋“ค(์˜ˆ: FOSRestAPIExplorerBundle)์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Swagger API๋งŒ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ(๋”ฐ๋ผ์„œ Swagger๋Š” JSON์œผ๋กœ ์ˆ˜์ง‘ ๋ฐ ๋…ธ์ถœ๋˜๋Š” ์ •๋ณด๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ) ์•„๋‹ˆ๋ฉด ์ž์ฒด ์›น ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ณ„๋„์˜ ๋ฒˆ๋“ค์€ ์ข‹์€ ์ƒ๊ฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ swagger๋ฅผ ์ง€์›ํ•œ๋‹ค๋ฉด ๋ฒˆ๋“ค ์ด๋ฆ„์—์„œ ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋„ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ง€์›ํ•˜๊ณ  ์‹ถ์€์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋™๊ธฐ์™€ ์Šค์›จ๊ฑฐ์˜ ์งˆ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. swagger์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์งˆ๋ฌธ: ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋‚ด๋ถ€ API์™€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๊ณต๊ฐœํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด Swagger JSON์„ ๋ฐ˜ํ™˜ํ•˜๋Š” URL์„ ๊ณต๊ฐœํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ... :D ์ง„์‹ฌ์œผ๋กœ, ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฒฝ๋กœ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ public์˜ ๊ฒฝ์šฐ @Expose() ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ @Expose(false) ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. -- ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. FOSJsRoutingBundle๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ๋…ธ์ถœ). "์—ฌ๊ธฐ์— ๊ณต๊ฐœ API์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ๋งํฌ๋Š” ๊ท€ํ•˜๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค"๋ผ๋Š” ์˜๋ฏธ์ธ ๊ฒฝ์šฐ ๋ณด์•ˆ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ @Api("public") ๋ฐ @Api("private") $์™€ ๊ฐ™์€ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค๋ฅธ API๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๊ทธ๋“ค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์˜ ๊ฒฝ์šฐ: ์ผ๋ฐ˜ ์ด๋ฆ„์„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Swagger๋Š” ์ง€์›๋˜๋Š” ์ฒซ ๋ฒˆ์งธ API ๋ฌธ์„œ ์„œ๋น„์Šค๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋ƒฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ๋Š” ์•ˆ ๋จ). ์˜ˆ๋ฅผ ๋“ค์–ด @odino ๋Š” WADL ์ง€์›์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์•„์ด๋””์–ด์™€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ๊นŒ์ง€ GitHub ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ† ๋ก ํ•  ์งˆ๋ฌธ์ด๋‚˜ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ฌ์‹ญ์‹œ์˜ค(์ด๋ฆ„ ์ง€์ •๋„ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Œ) ;-)

https://github.com/pminnieur/FOSRestApiExplorerBundle

๊ทธ๋ž˜ ์ข‹์•„. ์ผ๋‹จ ์ƒํ™ฉ์ด ํ˜•์„ฑ๋˜๋ฉด .. FOS๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/wordnik/swagger-ui ๋ฅผ "๋””์Šคํ”Œ๋ ˆ์ด"๋กœ ํ™œ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ?

์šฐ์„ , ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. swagger-ui์—์„œ ์‚ฌ์šฉํ•  swagger-spec ์ค€์ˆ˜ json๋งŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

https://github.com/nelmio/NelmioApiDocBundle ์— ์ฐฌ์„ฑํ•˜์—ฌ ๋งˆ๊ฐ

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ์˜ค๋ž˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ Swagger / Openapi์šฉ ํŒจํ‚ค์ง€/๋ฒˆ๋“ค์„ ์ฐพ๋Š” ๋™์•ˆ ๋น„๊ต์  ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ์žฌ๊ณ ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? NelmioApiDocBundle์ด ๋ฒ„๋ ค์ง€๊ณ  Symfony for Swagger/OpenApi(๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  RAML, ...?)์— ํ†ตํ•ฉ๋˜๋Š” ์‹ค์ œ ๋Œ€์•ˆ์„ ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰