๋์ผํ URL์ ๋ํ POST์ ๋ํด ๋๋ต์ ์ผ๋ก ๋์ผํ ๋ ๊ฐ์ง ์์์ ์ ๊ณตํ๋ API๊ฐ ์์ต๋๋ค. ์ฃผ์ ์ฐจ์ด์ ์ ์์ฒญ์ Content-Type:์ด๋ฉฐ application/json ๋๋ text/dns(RFC-4207)๋ฅผ ํ์ฉํฉ๋๋ค. ๋ ๊ฐ์ง ์์ฒญ ์์์ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ง๋ง ์๋ก ์ง์ ๋ฒ์ญํ ๊ฒ์ด๋ผ๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋๋ค.
Legacy Blueprint๋ฅผ ํตํด ์ด๋ ๊ฒ ๋งํ ์ ์์ต๋๋ค. FORMAT:1A ํธ์ง๊ธฐ๋ ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค(๋ ์ค ํ๋๋ง ํ์).
๋ด๊ฐ ์ด๊ฒ์ ๋ฌ์ฑ ํ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ ๋ฐ์ดํธ: ํ ๊ฐ์ง ์๋ต๋ง ์ธ๊ธํ๋ฉด โโ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
FORMAT: 1A
# multiple posts?
## Try to make two posts [/v1/whatever]
### POST
+ Request JSON (application/json)
{ nil: nil }
+ Request DNS (text/dns)
whatever
+ Response 204
๊ทธ๋ฌ๋ ์๋ฒ ๋๋ ๋ชจ๋์์๋ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋์ง ์์ต๋๋ค(ํ๋์ ์์ฒญ ์ ํ๋ง ํ์). ํธ์ง๊ธฐ ๋ด์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ ๋ฌธ์ ๋ณด๊ธฐ๊ฐ ์ข์ต๋๋ค.
@jrep
์ด๊ฒ์ ํ์ฌ Apiary ๋ด์ฅ(๋์์ธ)์์ ๋ถ์กฑํ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํด @apiaryio ํ์
@jrep ๋ ๋ค์ค ์๋ต์ ์ง์ํ๊ธฐ ์ํ ์์ฒญ(embed์ ์ ํ ์์ ์์)์ ๋๊น?
๊ทธ๋ ๋ค๋ฉด ๋ค์์ด ์ด๋ฏธ ์ ํจํด์ผ ํฉ๋๋ค.
FORMAT: 1A
## Try to make two posts [/v1/whatever]
### POST
+ Request JSON (application/json)
JSON
+ Response 200 (application/json)
JSON
+ Request DNS (text/dns)
whatever
+ Response 200 (text/dns)
whatever
๊ทํ์ ์๋ ์ฌ๋ฌ ์์ฒญ์ ๋ณด์ฌ์ฃผ์ง๋ง ํ๋์ ์๋ต ๋ง ๋ณด์ฌ์ค๋๋ค. ๋ด ์์ ๊ฐ์ต๋๋ค. ๋ค, ๋ฌธ๋ฒ์ ์ผ๋ก๋ ์ ํจํ์ง๋ง ํํํด์ผ ํ ๊ฒ์ ํํํ ์ ์์ต๋๋ค.
์: ์ฌ๊ธฐ์์ ํ์ํ ๊ฒ์ ๊ฐ ์์ฒญ์ ๋ํด ๋ค๋ฅธ "์๋ต 200"์ ํ์ํ๋ ๊ฒ์ ๋๋ค. ์๋ต ๋ด์ฉ ์ ํ์ ์์ฒญ ๋ด์ฉ ์ ํ๊ณผ ์ผ์นํ์ง๋ง(๋ฐ๋ผ์ ๋ ๊ฐ์ ์์ฒญ ๋ด์ฉ ์ ํ์ ๋ ๊ฐ์ ์๋ต ๋ด์ฉ ์ ํ์ ์๋ฏธํจ) ๋ ์๋ต์ ์ ๋ณด๋ ์ ํํ ๋์ผํ์ง ์์ต๋๋ค.
๋ ๊ฑฐ์ ํ์์ ์ฌ์ฉํ์ฌ ํ๋์ ์์ฒญ๊ณผ ํด๋น ์๋ต์ ์ ์ํ ๋ค์ ๋ค์ ์์ฒญ/์๋ต ์์ ์ ์ํ์ต๋๋ค. ๊ทธ๊ฒ์ ์๋ก์ด ํ์์ ๊ตฌ๋ฌธ ์ค๋ฅ์ด๋ฉฐ ์ด๊ฒ์ ๋งํ ์ ํจํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ฐ์ดํธ: ์ฃ์กํฉ๋๋ค. ์ถฉ๋ถํ ์์ธํ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๊ทํ์ ์๋ ๋ ๊ฐ์ง ์๋ต๊ณผ ๋ช ๋ช ๋ ์์ฒญ์ ์ฌ์ฉ์ด๋ผ๋ ๋ ๊ฐ์ง ๋ฉด์์ ๋์ ๋ค๋ฆ ๋๋ค. ์ง๊ธ ์๋ ์ค์ ๋๋ค.
@jrep
๋๋ ๋น์ ์ด ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ์๋ฏธํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋ ๊ฑฐ์ ์ฒญ์ฌ์ง์ ์ผ๋ถ๋ฅผ ์ฌ๊ธฐ์ ์ ์ถํด ์ฃผ์๊ฒ ์ต๋๊น?
Github ํฐ์ผ์ผ๋ก ํ ์คํธ๋ฅผ ์ฒจ๋ถํ ์ ์์ต๋๋ค. https://dev-staging.akamai.com/api/luna/config-dns/blueprint.apib ์์ ๋ ๊ฑฐ์ ์ฒญ์ฌ์ง์ ์ป์ ์ ์์ต๋๋ค.
์์์ด์
POST /v1/zones/{zone}
> Content-Type: application/json
... some data ...
< 204
< Location: /v1/zones/example.com
POST /v1/zones/{zone}
> Content-Type: text/dns
... some other data ...
< 204
< Location: /v1/zones/example.com
๋๋ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํํํ๋ ๊ฒ์ด ๊ทผ๋ณธ์ ์ผ๋ก ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋ค.
## Zone [/v1/zones/{zone}]
### Create [POST]
+ Request Create with JSON (application/json)
{ ... json data ... }
+ Request Create with DNS (text/dns)
... dns data ...
+ Response 204
+ Headers
Location: /v1/zones/example.com
http://docs.multirequest.apiary.io
์ด๊ฒ์ ๊ณ ์ ์ ์ธ ๋ด์ฉ ํ์์ ์์ ๋๋ค. ์๋ต์ ๋ณธ๋ฌธ์ด ์๊ณ OK(๋ฐ ๋งํฌ)๋ง ํ์๋๋ ๋์ ๋ค์ํ ํํ์์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ญ๋๋ค.
์ด์ ๋ํ ๋ด์ฉ ํ์ ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
### Retrieve [GET]
+ Request Rerieve JSON representation
+ Headers
Accept: application/json
+ Response 200 (application/json)
{ ... json data ... }
+ Request Rerieve DNS representation
+ Headers
Accept: text/dns
+ Response 200 (text/dns)
... dns data ...
์ฝํ ์ธ ์ ํ์ ๋ค๋ฅด์ง๋ง ์๋ฏธ๊ฐ ๋์ผํ(๋ฆฌ์์ค ์์ฑ) ์ฌ๋ฌ ์์ฒญ์ ๋ํด ๋ณธ๋ฌธ์ด ์๋ ํ๋์ ์๋ต์ด ์ข์ ๋์์ธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ https://github.com/apiaryio/snowcrash/issues/53 ์ ๊ตฌํ์ผ๋ก ์ด ์ ํ(๋์ผํ ์ํ ๋ฐ ์ฝํ ์ธ ์ ํ์ ์ฌ๋ฌ ์๋ต์ด ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ )์ ํด์ ํ๊ณ ์ถ์ต๋๋ค.
@jrep ์ด ๋ฌธ์ ๋ https://github.com/apiaryio/snowcrash/issues/53 (Snow Crash v0.10.0)์์ ํด๊ฒฐ๋์์ผ๋ฏ๋ก ์ข ๋ฃํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ๋๊ธ์ ๋ฌ๊ณ ๋ค์ ์ฝ๋๋ค.
๋์ ์๋ ์ฌ๋ฌ ํธ๋์ญ์ ์์ ๊ฐ ์์ ์ ์์ง๋ง apiaryio/snowcrash#53 ์์ ๋ณผ ์ ์๋ฏ์ด Apiary์์๋ ๋งค์ฐ ๊น๋ํ๊ฒ ๋ ๋๋ง๋์ง ์์ต๋๋ค.
๋ค์ ์๋ฅผ ๋ค์ด ...
์ฌ์์ ๋ฐ๋ผ ๋ค์ํ ์๋๋ฆฌ์ค(์: ์๋ก ๊ณ ์นจ์์ ์ก์ธ์ค ํ ํฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ์ํธ์์ ํ ํฐ ์์ฑ ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๋ /oauth2/authorize
๊ฐ ์์ต๋๋ค. API ๋ฌธ์์์ ์ด๋ฌํ ์์
์ ๋จ์ผ ์์
์ผ๋ก ๋ณํฉํ๋ ๊ฒ์ ๋
์๊ฐ ์ดํดํ๊ธฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋์ ์ฌ์ด๋ ๋ฉ๋ด์์ "์ก์ธ์ค ํ ํฐ ์๋ก ๊ณ ์นจ" ๋ฐ "์ฌ์ฉ์ ์ธ์ฆ"๊ณผ ๊ฐ์ ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ผํ ๋ฉ์๋/URL ์กฐํฉ์ ๋ ๋ฒ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ด๊ฒ์ API ์ฌ์์ด ๊ฐ๋ฐ์์๊ฒ ํน์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๊ณ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ๋์์ธ ํจํด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ์ ๋ํ์ ์ธ ์์ ๋๋ค.
์๋ชป๋ ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์๊ฐ ๋ณด์
๋๋ค. Body
์์์ ์ฐธ์กฐํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋์ ์๋ ์ฌ๋ฌ ํธ๋์ญ์ ์์ ๊ฐ ์์ ์ ์์ง๋ง apiaryio/snowcrash#53 ์์ ๋ณผ ์ ์๋ฏ์ด Apiary์์๋ ๋งค์ฐ ๊น๋ํ๊ฒ ๋ ๋๋ง๋์ง ์์ต๋๋ค.
๋ค์ ์๋ฅผ ๋ค์ด ...
์ฌ์์ ๋ฐ๋ผ ๋ค์ํ ์๋๋ฆฌ์ค(์: ์๋ก ๊ณ ์นจ์์ ์ก์ธ์ค ํ ํฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ์ํธ์์ ํ ํฐ ์์ฑ ๋ฑ)๋ฅผ ์ฒ๋ฆฌํ๋
/oauth2/authorize
๊ฐ ์์ต๋๋ค. API ๋ฌธ์์์ ์ด๋ฌํ ์์ ์ ๋จ์ผ ์์ ์ผ๋ก ๋ณํฉํ๋ ๊ฒ์ ๋ ์๊ฐ ์ดํดํ๊ธฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋์ ์ฌ์ด๋ ๋ฉ๋ด์์ "์ก์ธ์ค ํ ํฐ ์๋ก ๊ณ ์นจ" ๋ฐ "์ฌ์ฉ์ ์ธ์ฆ"๊ณผ ๊ฐ์ ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ผํ ๋ฉ์๋/URL ์กฐํฉ์ ๋ ๋ฒ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.์ด๊ฒ์ API ์ฌ์์ด ๊ฐ๋ฐ์์๊ฒ ํน์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๊ณ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ๋์์ธ ํจํด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ์ ๋ํ์ ์ธ ์์ ๋๋ค.