์์ฐ์ด ์์๋๋ ๋ชจ๋ ์์น(์: ํ์ด๋ก๋ ๋ณธ๋ฌธ ๋๋ ์คํค๋ง)์ Markdown ๋งํฌ ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
์ ๋ ์ด ๊ธฐ๋ฅ์ ๊ด์ฌ์ด ์์ผ๋ฉฐ ๋์ค์๋ผ๋ ๋นจ๋ฆฌ ์ถ๊ฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฐ๋ฆฌ์ ํน์ ์ฌ์ฉ ์ฌ๋ก๋ ์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ์ด Apache Avro์ ์ํด ์์ฑ๋ ์ด์ง ๊ตฌ์กฐ์ธ API๋ฅผ ๋ฌธ์ํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์์ฒญ/์๋ต์ ๊ฒฝ์ฐ "์คํค๋ง"๊ฐ Avro ์คํค๋ง ์ ์ ํ์ผ ๋๋ ํด๋น Avro ์คํค๋ง๋ฅผ ์ค๋ช ํ๋ ์์ฑ๋ HTML ๋ฌธ์์ ๋ํ ๋งํฌ๊ฐ ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.
## POST /myresource
Creates a new myresource.
+ Request (application/vnd.example.myresource+avro)
+ Schema:
[MyResource.avsc](http://docs.example.com/avro/myresource.avsc)
+ Response 201 (application/vnd.example.myresource+avro)
+ Schema:
[MyResource.avsc](http://docs.example.com/avro/myresource.avsc)
:+1:
@mhurne @davidmc24 AST์์ ์ด ๊ธฐ๋ฅ์ ํํ์ ๋ํด ์๊ฐํด ๋ณด์ จ์ต๋๊น? AST์์ ํ์ดํผ๋งํฌ๋ฅผ ๋ณด๊ณ ์ถ์ต๋๊น? ์๋๋ฉด ์ฒญ์ฌ์ง ํ์๊ฐ ๋์ URL์ ๊ฐ์ ธ์ค๊ณ ํด๋น ์ฝํ ์ธ ๋ฅผ AST์ ํฌํจํ ์ ์์ด์ผ ํฉ๋๊น?
๋ด ์์์ AST์ ํด๋น ํ์ดํผ๋งํฌ์ ๋ด์ฉ์ด ์๋๋ผ ํ์ดํผ๋งํฌ๊ฐ ํฌํจ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด HTML ๋ฌธ์์์ ๋งํฌ๋ฅผ ์์ฑํ ์ ์๋๋ก AST๊ฐ ์ง์ ์ฝํ ์ธ ๊ฐ ์๋ ํ์ดํผ๋งํฌ์์ "์๊ณ " ์์ผ๋ฉด ์ ์ฉํ ์ ์์ต๋๋ค.
API์์ ์คํค๋ง๋ฅผ ์ธ๋ถํํ๊ธฐ๋ก ์ ํํ ๊ฒฝ์ฐ ์คํค๋ง๊ฐ ๋๋ฌด ์ปค์ API ๋ฌธ์์์ ์ธ๋ผ์ธํ๊ธฐ์ ์ ํฉํ์ง ์๊ฑฐ๋ ์คํค๋ง๊ฐ ์ฌ๋ฌ API์์ ์ฌ์ฉ๋๋ฉฐ ์์ฒด์ ์ผ๋ก ์ ๋ขฐํ ์ ์๋ ๋ฌธ์๊ฐ ์๊ฑฐ๋ schema๋ ์๋ฒ ๋ฉ์ ์ ํฉํ์ง ์์ ํ์์ ๋๋ค. ์ด๋ฌํ ์๋ ์คํค๋ง์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ๋น์ทํ ์ด์ ๊ฐ ๋ค๋ฅธ ํ์ด๋ก๋ ์ ํ์๋ ์ ์ฉ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
@davidmc24
๋๋ ๊ทธ๊ฒ์ ์ข์ํ๋ค. ํ์ดํผ๋งํฌ์ผ ๊ฒฝ์ฐ ํ์์์ ๊ตฌํํ๊ธฐ๊ฐ ์๋นํ ์ฌ์ธ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ ํฐ ๊ณผ์ ๋ AST ๋ฐ ํด๋น ๋ฏธ๋์ด ์ ํ์ ํ์ํ ๋ณ๊ฒฝ๊ณผ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
์๋ง๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฒ์ ๋๋ค.
{
"name": "<name>",
"description": "<description>",
"headers": {
"<header>": {
"value": "<header value>"
}
},
"body": {
"content": "<body>",
"href": "<uri>"
},
"schema": {
"content": "<schema>",
"href": "<uri>"
}
}
๋ค, ๋ฐ๋ก ์ ๊ฐ ๊ณ ๋ คํ๊ณ ์๋ AST์ ๋๋ค.
์ถ๊ฐ๋ก Drafter
apiaryio/snowcrash#57์ ์ํด ์ธ๋ถ ์์ฐ์ด ์ฝ์
๋ (๋จ์ง ์ฐธ์กฐ ๋งํฌ๊ฐ ์๋) ์ถ๊ฐ ๊ตฌ๋ฌธ์ ์ถ๊ฐํฉ๋๋ค.
:[file.json](path/to/file.json)
๋๋
=[file.json](path/to/file.json)
๋๋ Markkown _์์์ ๋งํฌ ์ด๋ฆ_ ์ฌ์ฉ:
:[path/to/file.json]()
๋๋
=[path/to/file.json]()
์๋
ํ์ญ๋๊น,
๋ค์์ ์ธ๋ถ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค. API์ ์์ฑ ์ ์/์ค๋ช
์ ๋ชจ๋ ๋ฌธ์์์ ์ฌ์ฉ๋๋ ๋ง์คํฐ ์ฉ์ด์ง์ ํด๋น ์ ์์ ์ฐ๊ฒฐํ๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ด ๋ชจ๋ ๋ฌธ์๋ฅผ ์ต์ ์ํ๋ก ๋๊ธฐํํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด API ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ์ ์๊ฐ ๋๊ธฐํ๋์ง ์์ ์ฌ์ง๋ฅผ ๋จ๊ฒจ๋ก๋๋ค.
Markdown์ ๋๋ถ๋ถ ํธํ๋๋ ํ์ฅ์ ๋ถํธํ ์ ๋๋ก ๋์จํ๊ฒ ๊ฒฐํฉ๋ ์ ํ๊ตฐ์ด๋ฏ๋ก ํ์คํ์ง ์์ง๋ง ๋งํฌ์ ๊ฐ์ ๊ตฌ๋ฌธ์ด ์ค์ ๋ก "์ฐธ์กฐ๊ฐ ์๋ ํฌํจ"์ ์๋ฏธํ๋ ๊ฒฝ์ฐ๋ ์ด๋ฏธ์ง ๊ตฌ๋ฌธ( ! sigil ์ฌ์ฉ)์
๋๋ค. : ![Alt text](/path/to/image.jpg "Optional Title")
, ์ด๊ฒ์ Gruber์ ์๋ ์ฌ์ ์ ์ผ๋ถ์
๋๋ค. ๋ฌด์๋ณด๋ค Z์ ์ ์์ ์ด ๊ตฌ์กฐ(ํ์ผ ์ด๋ฆ์ด ์๋ชป๋ ์์น์ ์์)๋ฅผ ์๋ฐํฉ๋๋ค. ์ค์ํ๋ ๊ฒ์ด ๋ ๋ซ์ง ์์ต๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ธฐ์กด ๊ตฌ๋ฌธ์ ์ sigil์ ์ฌ์ฉํ์ญ์์ค.
์ข์ ์ง์ @jrep !
์ค์ํ๋ ๊ฒ์ด ๋ ๋ซ์ง ์์ต๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ธฐ์กด ๊ตฌ๋ฌธ์ ์ sigil์ ์ฌ์ฉํ์ญ์์ค.
๊ทธ๊ฒ์ด ์ ๋ชฉํ์ ๋๋ค.
Gruber ์ ๋ฐ๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํด์ผ ํฉ๋๋ค.
[label](path/to/image.png)
[alt text][label2]
[label2]: path/to/image.png
[label3][]
[label3]: path/to/image.png
์ฌ๊ธฐ์ label
, alt text
๋ฐ label3
๋ ์ด๋ก ์ ์กด์ฌํ์ง ์์ง๋ง ๋ ๋๋ง ํ์ ์์๊ฐ ํ์๋์ง ์์ต๋๋ค.
๋๋ ๋์ ์์ ์ ์ถ์ธกํ๋ค.
=[path/to/file.json]()
ํด์ผํ๋ค
=[path/to/file.json][]
์ฌ๊ธฐ์ ๋ ์ด๋ธ์ ์ค์ URL์ด๋ฏ๋ก ์ ์ ํ ์ ์ฒด ์ ์(๋งํฌ๋ค์ด์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋จ)๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
=[path/to/file.json][]
[path/to/file.json]: path/to/file.json
์ด์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ ๊ฒ์ ๋ถ๋ช ํ ์ง๋ฃจํ ๊ฒ์ ๋๋ค.
[path/to/file.json]: path/to/file.json
์ง๋ฌธ์ โ ์ด(๋ ์ด๋ธ ์ ์)๊ฐ ํ์์ ์ํด ์์์ ์ผ๋ก ๊ฐ์ ๋์ด์ผ ํฉ๋๊น? ์๋๋ฉด ์ฒญ์ฌ์ง ์์ฑ์์๊ฒ [alt text](URL)
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋๋ก ์์ฒญํด์ผ ํฉ๋๊น?
๋งํฌ๊ฐ ์ฌ๋์ด ์ฝ์ ์ ์๋๋ก ์ค์ ๋ก _์์ฐ์ด ๋ฌด์์ธ์ง ์ค๋ช
ํ๊ธฐ ์ํด alt/label ๋ถ๋ถ์ ์ฌ์ฉํ ์ ์์์ต๋๊น? =[file.json](path/to/file.json)
์ ๊ฐ์ ๊ฒ์ ์์ฑํ๋ ๊ฒ์ ๋ถํ์ํ๊ฒ ์ง๋ฃจํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง =[Schema for notes](path/to/file.json)
๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฒญ์ฌ์ง ์์ฑ์๊ฐ ์ฒญ์ฌ์ง์ ๋
์์๊ฒ ๋ ๋น๋ฐ์ค๋ฝ๊ฒ ๋ง๋ค๋๋ก ๊ถ์ฅํฉ๋๋ค. ์ค์ ๋ก ์์ฐ์ด ๋๋ฝ๋๊ฑฐ๋ ์ ํํ ์ฐ๊ฒฐ๋ ๊ฒ์ด ๋ช
ํํ์ง ์์ ์ ์์ต๋๋ค. alt
์์ฑ์ ์ ํํ ์ด ๊ฒฝ์ฐ๋ฅผ ์ํด ๋ฐ๋ช
๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๊ตฐ๊ฐ ์ด๊ฒ์ ์ฐํํ๊ณ ์ด๋ฐ ์์ผ๋ก ์์ฐ์ ์ค๋ช
ํ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฌด์ํ๋ ค๋ ๊ฒฝ์ฐ, ๊ทธ๋
๋ ํญ์ ๊ฑฐ๊ธฐ์ ๋๋ฏธ ํ
์คํธ๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค(์: ์ด๋ฏธ ์ธ๊ธ๋ file.json
).
=
๊ตฌ๋ฌธ์ ์์ ๋ก ์ฌ์ฉํ๋๋ฐ !
์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ๋ ๊ตฌ๋ฌธ(์ง์ ๋งํฌ, ๋ช ์์ ๋๋ ์์์ ๋ ์ด๋ธ)์ ๊ด๊ณ์์ด ์ถ๊ฐ ๊ธฐํธ๋ก ๋งํฌ๋ค์ด์ ์ง์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ด์ ๋์ํ๋ค๋ฉด ๋ค์ ๋ ๊ฐ์ง ์ง๋ฌธ๋ง ๋จ์ต๋๋ค.
๋ด ์๊ฒฌ์ผ๋ก๋ Schema for notes
์ ๊ฐ์ ๋ ์ด๋ธ์ด ์์ต๋๋ค.
=[Schema for notes](path/to/file.json)
๋๋ถ๋ถ์ ๊ฒฝ์ฐ Notes
๋ฆฌ์์ค์ ์คํค๋ง ์น์
์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต์
๋๋ค...
์:
# Notes [/notes]
## GET
+ Response 200
+ Body
...
+ Schema
=[Schema for Notes](path/to/file.json)
์๊ฐ?
์ ๋ ๋ชจ๋ ํ์ค ๋ณํ์ ์ง์ํ๋ ๋ฐ ์ฐฌ์ฑํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
=[๊ฒฝ๋ก/to/file.json][]
[๊ฒฝ๋ก/to/file.json]: ๊ฒฝ๋ก/to/file.json
... ๋ด๊ฐ Gruber์ ์ ์๋ฅผ ์ดํดํ๋ ๋ฐฉ๋ฒ์ด ์๋๋๋ค. ์คํ๋ ค ๋๋ honzajavorek์ ๋์ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ []์ ๋ด์ฉ์ ๋งํฌ ํ ์คํธ์ ์ค๋ณต๋๊ณ ๊ท์ฐฎ์ ๋ณต์ ๊ฐ ์๋๋ผ ์ด๋ค ๋ฉด์์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ๊ทธ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฑฐ๊ธฐ์ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋ ๊ฒ์ด ๊ตฌ๋ฌธ์ ์ผ๋ก ์ ํจํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง (a) ์ด์ํ๊ณ (b) ๋์์ด ๋์ง ์์ต๋๋ค.
์๋๊ฐ "์๋ก์ด ์๋ช ์ด ์๋ ๋ชจ๋ Gruber-์ ํจํ ๋งํฌ ํ์"์ด๋ผ๋ฉด ๋๋ ๊ทธ ์๋ฏธ๋ฅผ ์ข์ํ์ง๋ง ๋ ๋๋ผ์ด ์(ํผ์์๋ณด๋ ๊ณผ ๋ด๊ฐ ์ ์ํ ์ข ๋ฅ)๋ฅผ ์ ์ํฉ๋๋ค.
@jrep @honzajavorek ๋์ํฉ๋๋ค.
์ด๋ฏธ์ง๋ ๋งํฌ์ ๋ํ ์์ฐ ํฌํจ์ ๊ธฐ์กด ํจํด๊ณผ ๋น๊ตํ๋ ๊ฒ์ ์ด๋ ต๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ค ์ด ๋์ ์กฐํฉ ์๋๊ฐ?
์ด๋ฏธ์ง ๊ตฌ๋ฌธ ์ ์ถ์ ๋ฌธ์ ๋ ์ด๋ฏธ์ง์ ์ธ๊ณ์์ ๋์ฒด ํ
์คํธ๊ฐ ์ค์ํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์ด์ง ์ปจํ
์คํธ์์ ์ค๋ณต๋์ง ์์ผ๋ฉฐ ์๋ฌด๋ ์ค์ ๋ก ![img.jpg](/path/to/img.jpg)
์ฐ๊ณ ์ถ์ดํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ์ฝํ
์ธ ๊ด๋ฆฌ ์์คํ
๊ณผ "๊ฒ์ผ๋ฅธ" ์ฌ๋๋ค์ ์ด๊ฒ์ ํฉ๋๋ค. ๋์ฒด ํ
์คํธ๋ฅผ ์๊ตฌํ๋ ๊ฒ์ ์ข์ ์ต๊ด์ ๊ฐ๋ฅด์น๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์์ฐ์ ๋ฐ๋์ ๋์ฒด ํ ์คํธ๊ฐ ํ์ํ ๊ฒ์ ์๋๋๋ค. ์ฌ์ค์ ๋๋ค. @zdne์ด ์ธ๊ธํ๋ฏ์ด ์ฌ๊ธฐ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์์ ํ ๋ช ํํ๊ฒ ์ ์ ์๋ ์ปจํ ์คํธ์์ ํญ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋์ํฉ๋๋ค. ๋ฌธ์ ๋ ๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ ์ผํ ๋น์ ๋ ๋ ์ด๋ธ์ด ์๋ ๋งํฌ๋ผ๋ ๊ฒ์ ๋๋ค.
[Google](http://www.google.com)
๋...
<http://www.google.com>
( ๊ทธ๋ฃจ๋ฒ )http://www.google.com
(์ค๋์ ๋งํฌ๋ค์ด ํ์ค, ์ถ์ธก)ํ์ด๋ธ๋ฆฌ๋๊ฐ ํ์ํ ๊ฒฝ์ฐ "์ด๋ฏธ์ง์ ๋ํ ์๋ ๋งํฌ ๊ตฌ๋ฌธ"์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ๊ฐ๋ฅํ ํ Gruber๋ฅผ ์ค์ํ๊ธฐ๋ฅผ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ํฉ๋๋ค.
=[Alternative text about assets](/dev/null)
โ ๋ชจ๋ ์ฌ๋์ด ์ด์ ๋ํด ์ ์๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋ช
ํด์ผ ํฉ๋๋ค.=[Alternative text about assets][id]
โ ๋์ผํ ์์ฐ์ ์ฌ๋ฌ ์์น์ ํฌํจํ๋ ๊ฒฝ์ฐ=</dev/null>
or <=/dev/null>
โ autolink ๊ตฌ๋ฌธ(_... ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ autolink ๊ตฌ๋ฌธ์ ์ด๋ป๊ฒ ์๊ฒผ์๊น์?_), Gruber์ autolink ๋ฒ์ ์ ์๋ฌด๋ ๋ชจ๋ฆ
๋๋ค. <
s ๋ฐ >
s), ๊ทธ๋ฌ๋ ์ค์ ๋ก ๋์ฒด ํ
์คํธ๊ฐ ํ์ํ์ง ์๊ณ ์ด์ ์ง์ฆ์ด ๋๋ ๊ฒฝ์ฐ ์ฌ๋๋ค์ ์ด๊ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.๋ค์ ํ ๋ฒ ์๋ก =
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ์๊ฐ์๋ ์ด๊ฒ์ด ๊ฐ์ฅ ์ฝ๊ธฐ ์ฝ๊ณ ์ ์ด๋ Gruber ๊ฐ์ ์๋ฃจ์
์ด ๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, ๋๋ ๊ณ ๋ ค
[label3][]
[label3]: path/to/image.png
๊ธฐ์กด Markdown ์ฌ์ฉ์ ํ์ค์ ๋ฐ๋ฅด์ง ์๊ณ ๋ ์์ธ ์ ์๊ฒ๋ ๋ค์ ๋น๋ฐ์ค๋ฝ์ต๋๋ค. ๋๋ ๊ทธ๋ฐ ๊ฐ๋ฅ์ฑ์ ๋ํด์๋ ๋ชฐ๋์ต๋๋ค. ํ์ด๋ง์ ๋ ๋ฒ์งธ ๋ธ๋ํท์ ์ํด ์ํ๋์ด์ผํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. (๊ทธ๋ฌ๋ ์ด ๋ง์ง๋ง ๋จ๋ฝ์ ๋งค์ฐ ์ฃผ๊ด์ ์ด๋ผ๋ ๊ฒ์ ์ถฉ๋ถํ ์๊ณ ์์ต๋๋ค.)
@zdne : =
๋ ๊ด์ฐฎ์ ๋ณด์
๋๋ค.
@zdne : ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ ํ
์คํธ =[IN HERE](schema.json)
๋ ์ ๊ฐ ์๊ฐํ ์ ์๋ ๋ธ๋ฃจํ๋ฆฐํธ ์ฉ๋์ ์ค๋ณต๋๋ค๋ ์ ์ ์ธ์ ํฉ๋๋ค. ์ฌ๊ธฐ์์๋ ๋ธ๋ ์ธ์คํ ๋ฐ๋ง ํ๋ฉด ๋์ง๋ง ๋ฌธ๋ฒ์ ๋จ์ํํ๊ธฐ ์ํด ๊ทธ ์ค๋ณต์ฑ์ ํ์ฉํ๋ฉด ์ด๋จ๊น์? ์ฆ, ๊ต์ฒด
# Notes [/notes]
## GET
+ Response 200
+ Body
...
+ Schema
=[Schema for Notes](path/to/file.json)
~์ ํจ๊ป
# Notes [/notes]
## GET
+ Response 200
+ Body
...
+ =[Schema for Notes](path/to/file.json)
@honzajavorek : ์ค์ ๋ก Blueprint๊ฐ ํด๋น ์์น์์ "/dev/null" ๋ฌธ์์ด์ ํ์ฉ/๋ช ๋ นํ๋๋ก ์ ์ํ๊ณ ์์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฅ ์๋ฆฌ ํ์์์์ต๋๊น?
์ ๋ "์ฐธ์กฐ ๋งํฌ"๋ ์ฌ์ฉํ์ง ์์ง๋ง, ๋ธ๋ฃจํ๋ฆฐํธ๊ฐ ์ด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋ฐ๋ํ์ง๋ ์์ต๋๋ค.
@jrep /dev/null
์๋ฆฌ ํ์์๋ก ์ฌ์ฉํ์ต๋๋ค. :)
์น์ ํค๋์์ ์ง์ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ ๋ก ์ ํ ๋๋น ๋ณด์ด์ง ์์ต๋๋ค! ๋ฌผ๋ก , ์ฒซ๋์ ๊ทธ๋ฐ ๊ฒ์ ๋จ์ ์ด ๋ฌด์์ธ์ง ์ ์๊ฐํ์ง ๋ชปํ์ง๋ง... ์ฒซ๋์๋ ๋งค๋ ฅ์ ์ผ๋ก ๋ณด์ ๋๋ค.
@jrep ์ข์์.
๋ ๋์๊ฐ
# Notes [/notes]
## GET
+ Response 200
+ =[Body](path/to/body.json)
+ =[Schema](path/to/schema.json)
ํ์ผ์ ๋ณ๋์ ํ์ผ๋ก ๋ถํ ํ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ์ฅํฉํ API์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ค๊ฐ์ ๋๋ grunt๋ก ์ฒญ์ฌ์ง ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋๋ grunt-import๋ฅผ ์ฌ์ฉํ๊ณ ๋ด index.source.apib
ํ์ผ์ ๋๋ถ๋ถ <strong i="7">@import</strong> "/include/section.apib";
๊ทธ๋ฐ ๋ค์ ๋ด๊ฐ ํ๋ ๋ชจ๋ ๊ฒ์ grunt watch
ํ๊ณ ํ์ผ์ ์ ์ฅํ์๋ง์ grunt๊ฐ ๋ด index.source.apib
ํ์ผ์ 'index.apib'๋ก ๋ค์ ์ปดํ์ผํฉ๋๋ค. ์ด ํ์ผ์ ์ญ์ aglio๊ฐ ๊ฐ์ํ๊ณ ์์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ค์์ผ๋ก ์๋ก๊ณ ์นจํฉ๋๋ค. ์ค์๊ฐ์ผ๋ก ๋ ๋๋ง์ ๋ณด์ฌ์ฃผ์ธ์.
์ค์ ํ๋ ๋ฐ 5๋ถ์ด ๊ฑธ๋ฆฌ์ง๋ง ์ถ์ด ํจ์ฌ ๋ ๋ฉ์ง๋๋ค! :+1:
@alexborisov ๊ฝค ๊น๋ํฉ๋๋ค! ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด (๋ค๋ฅธ ๊ณณ์์) โ ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ ์ด๊ฒ์ ์ฒ๋ฆฌํด์ผ ํ๋ ํ์ ํ๋ค์ค ๋๊ตฌ์ ๋ํ ์์ ์ ์์ํ์ต๋๋ค.
๋ํ ๊ทธ ๊ฐ์น๋ฅผ ์ํด ์ฌ๋ฌ ์ฒญ์ฌ์ง์ ํ๋๋ก ๊ตฌ์ฑํ๊ณ Apiary ํด๋ผ์ด์ธํธ gem https://gist.github.com/danvine/11087404๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ํ๋ ์คํฌ๋ฆฝํธ๊ฐ
@alexborisov , ์ ๋ง ๋๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค! ๋น์ (๋๋ ์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์๋ ์ฌ๋)์ด grunt-import์ ๋์ํ๋ Gulp๊ฐ ์๋์ง ์๊ณ ์์ต๋๊น? ๋ชจ๋ ๋์ JS ๋ฐ html ๋ฌธ์๋ฅผ ์ฐพ์์ต๋๋ค.
@skawaguchi gulp -file-include ๋ฅผ ์ฌ์ฉํ๊ณ json์ ๊ด์ฐฐํ๊ณ API๋ฅผ ๋น๋ํ๋ gulp ์์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ ์ผํ ๋จ์ ์ api.md๋ฅผ ์์ฑํ๊ธฐ ์ํด api.source.md๊ฐ ์์ด์ผ ํ์ง๋ง IMO๋ ์ง๋ถํด์ผ ํ๋ ๋น์ฉ์ด ์ ๋ค๋ ๊ฒ์ ๋๋ค.
๋ํ @jamesramsay ์ Hercule โ https://github.com/jamesramsay/hercule์ ์ฒดํฌ์์ํ ๊ฐ์น๊ฐ ์๋ ๊ฒ
์ธ๊ธํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค @zdne . API ๋ฌธ์๋ฅผ ์์ฑํ ๋๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์๊ณ ์ง๋ 3๊ฐ์ ๋์ ๋ด๋ถ์ ์ผ๋ก Hercule์ ์ฌ์ฉํด ์์ต๋๋ค.
Hercule์ ํฌํจ์ ์ํด ๊ฐ๋จํ {{filename.md}}
ํจํด์ ์ฌ์ฉํฉ๋๋ค.
๊ฑฐ์ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง ๋ค์ํ ์ ํ์ API ์๋น์๋ฅผ ์ํ ์ฌ๋ฌ API ์ปจํ ์คํธ๊ฐ ์์ผ๋ฉฐ ์๋ก ๋ค๋ฅธ ๋ฌธ์ ๊ฐ์ ์ค๋ณต์ ์ค์ด๊ธฐ ์ํด ๋ ธ๋ ฅํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์๋ ์ง์ํ๋๋ก ์ด ๊ตฌ๋ฌธ์ ํ์ฅํ์ต๋๋ค.
{{entity.json links:role-links.json}}
{
"id": 123,
"name": "example",
"links": {
{{links}}
}
}
{{links}}
์๋ฆฌ ํ์์๋ ์์ ํ์ผ ์ค ํ๋๋ก ์ง์ ๋ ๋์ ํ์ผ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๊ฑฐ์ ๋์ผํ ๋๊ท๋ชจ ์คํค๋ง์ ์ ์ฉํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
@jamesramsay
Markdown ๊ณ ์ ์ [<placeholder>](link)
๋์ {{link}}
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค. ์์์ ๋
ผ์ํ ๋ฐ์ ๊ฐ์ด. ์๋ฅผ ๋ค์ด:
=[gist](gist.apib)
๋๋
:[gist](gist.apib)
๋น์ทํ๊ฒ ์๋ํ๊ณ ๋งํฌ๋ค์ด์ผ๋ก ํฉ๋ฆฌ์ ์ผ๋ก ๋ ๋๋ง๋๋ฏ๋ก ๋งํฌ๋ฅผ ํ์ํ ์ ์์ผ๋ฉฐ `[placeholder] ๋งํฌ ์ต์
๊ณผ ํจ๊ป [placeholder][]
์ ๊ฐ์ ํจ์ฌ ๋ ํ๋ถํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค...
@zdne ์ ๋ง ์ข์ ์ ์์ ๋๋ค! 6๊ฐ์ ์ ์ ์ด ์ค๋ ๋๋ฅผ ๋ณด์ง ๋ชปํ ๊ฒ์ด ์์ฝ์ต๋๋ค.
{{link}}
๊ตฌ๋ฌธ์ MultiMarkdown 4์ transclusion ๊ตฌ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ต๋๋ค. ๊ทธ๊ฒ์ ํธ๋ฆญ์ํ๊ณ ๋๋ ์๋ก์ด ๊ตฌ๋ฌธ์ ๋ฐ๋ช
ํ์ง ์์์ต๋๋ค.
๋น์ ๋๋ Marked ์ฑ( <<[link]
)๊ณผ ๋ช ๊ฐ์ง ๋ค๋ฅธ Markdown ์ปดํ์ผ๋ฌ๋ ์ดํด๋ณด์์ต๋๋ค.
Github์์ ์์ค ๋ฌธ์๋ฅผ ๋ณผ ๋ ๋งํฌ๋ฅผ ํด๋ฆญํ ์ ์๋ค๋ ์ด์ ๊ณผ Markdown์ ๋๋๊ณผ์ ์ผ๊ด์ฑ์ด ํฅ์๋์ด :[gist](gist.apib)
๋ฅผ ์ฌ์ฉํ๋๋ก hercule์ ์
๋ฐ์ดํธํ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ํ์ ์ ์ํ๋ฉด NPM์ ์์ต๋๋ค.
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ ๋ด๋ถ ํ๋ก์ ํธ์ aglio ์ ํจ๊ป API Blueprint๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. API Blueprint๋ ํ์ฌ ํฌํจํ๋ ํ์ผ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ aglio๋ <!-- include(filename.json) -->
๊ตฌ๋ฌธ์ผ๋ก ํ๋๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด ๊ธฐ๋ฅ ๋๋ถ์ ์์ฒญ/์๋ต์ ๋ถํ ํ ์ ์์ต๋๋ค. API ๋ฌธ์์ JSON ๋ฐ์ดํฐ๋ ๋ช
ํํ์ง๋ง, ๋ถ๋ฆฌ๋ JSON ๋ฐ์ดํฐ ํ์ผ์ ๊ตฌ์ฑํ ๋ ๋์ผํ ๋ถ๋ถ์ ์ฌ์ฌ์ฉํ ์ ์ ํ ๋ฐฉ๋ฒ์ด ์ฌ์ ํ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด user_model.json
.
{
"username": "alice",
"comments": [
{
"id": 1,
"content": "hello"
}
]
}
๋ฐ comment_model.json
:
{
"id": 1,
"content": "hello"
}
user_model.json
์ ์ฃผ์ ๋ถ๋ถ์ ํญ์ comment_model.json
์ ๊ฐ์์ผ ํฉ๋๋ค. JSON ํ์ผ์ด ์๋ก ํฌํจ๋๋๋ก ํ๋ ๋ฉ์ปค๋์ฆ์ด ์๋ค๋ฉด ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ๊ฐ ๋งค์ฐ ์ฌ์ธ ๊ฒ์
๋๋ค. commend ๋ชจ๋ธ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ณณ์์ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
๋๋ ํ๋์ ๊ทธ๊ฒ์ ๊ณ ๋ คํ๊ณ ์ฌ๊ธฐ์ ๋ด ๋
ธ๋ ฅ์ ํฌํจํ์ฌ JSON ํ์ผ์ ์ง์ํ๋ ๊ตฌ๋ฌธ์ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค.
Python ๊ตฌํ์ด ํฌํจ๋ sytanx ํฌํจ: https://github.com/reorx/json_include
์ด์ ์ ๊ฒฝ์ฐ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{
"username": "alice",
"comments": [
{
"...": "include(commend_model.json)"
}
]
}
{ "...": "include(commend_model.json)"}
๋ฅผ ์ฌ์ฉํ์ฌ commend_model.json
ํ์ผ์ ๋ํ ํฌํจ์ ๋ํ๋
๋๋ค.
API Blueprint์ ๋ํ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ JSON ์์ฒด๋ฅผ ํฌํจ ๊ธฐ๋ฅ์ผ๋ก ์๊ฐํ๋ ค๊ณ ํ๋ ๋ค์ ์ผ๋ฐ์ ์ธ ๊ฒ์ ๋๋ค. API Blueprint์์๋ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ดํด๋ณด๊ณ ๋ช ๊ฐ์ง ์ ์์ ํ์ญ์์ค. ํ์ฌ ์ด json-include ๋ ๋ด ํ๋ก์ ํธ ์ค ์ผ๋ถ์์ ์ ์๋ํ๊ณ ์์ต๋๋ค. ํผ์๊ฐ ์ข๊ณ ์๋ฏธ๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ๋ชจ๋ ์๊ฐ์ ๋งค์ฐ ๊ฐ์ฌํ ๊ฒ์ ๋๋ค. )
์๋ ํ์ธ์ @reorx์ ๋๋ค ! ์์ด๋์ด๋ฅผ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ต๊ทผ ์ฐ๋ฆฌ๋ API Blueprint์์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ ๊ตฌ๋ฌธ์ธ MSON (๋ฒ ํ)์ ์ถ์ํ์ต๋๋ค. ์์ด๋์ด๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ์ค๋ช ํ ๋ค์ ๋ค๋ฅธ ํ์์ผ๋ก ์ง๋ ฌํ๋ฅผ ์์ฒญํ๋ ๊ฒ์ ๋๋ค.
๊ทํ์ ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
# Data Structures
## User
- username: alice
- comments (array[Comment])
## Comment
- id: 1
- content: hello
๊ทธ๋ฐ ๋ค์ JSON์ผ๋ก ๋ ๋๋งํ๋๋ก ์์ฒญํ ์ ์์ต๋๋ค.
# Resource [/r]
## Retrieve [GET]
+ Response (application/json)
+ Attributes (User)
์ด๋ป๊ฒ ์๊ฐํ๋์? ๋์์ด ๋ ๊น์?
์ด ๊ธฐ๋ฅ์ด ํ์ดํ๋ผ์ธ์ ์ด๋์๋ ์์ต๋๊น? ๊ทธ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋งค์ฐ ์ข์ ๊ฒ์
๋๋ค.
Blueprint๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ์ค๋ช
ํ์ง๋ง JSON ์คํค๋ง๋ ๋ณ๋๋ก ํธ์คํ
๋ฉ๋๋ค. ํ์ฌ request/response ์์์์ ์ง์๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ์ค๋ช
์ ๋งํฌ๋ก ์คํค๋ง๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.
์ค์ ๋ก ๊ฐ์ฅ ์ด์์ ์ธ ๊ฒ์ request/response ์์ ์๋์ ์๋ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ JSON ์คํค๋ง ์น ํ์ด์ง๋ฅผ "ํฌํจ"ํ ์ ์์ง๋ง ๋ฌธ์ ํ์ด์ง๊ฐ ๋ก๋๋ ๋ ์๋ฐฑ ๊ฐ์ ํฌํจ์ ์ํํ์ง ์๋๋ก ๋๋ฆฌ๊ฒ ๋ก๋๋์ด์ผ ํ๋ ๊ฒฝ์ฐ์
๋๋ค.
์์ฒญ/์๋ต ๋ณธ๋ฌธ ์์ ๋ฐ ์ ์ ์คํค๋ง ํ์ผ์ ๋ํ ์ธ๋ถ ์ฐธ์กฐ๋ฅผ ํฌํจํ ์ ์๋ค๋ ์ฌ์ค์ Blueprint๊ฐ ๋ค๋ฅธ API ์ ์ ์ธ์ด์ ๊ด๋ จํ์ฌ _๋งค์ฐ_ ํฐ ๋จ์ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
+1
@jonathancrosmer @lpbm @moon0326
ํนํ https://github.com/jamesramsay/hercule ํ์ธ
https://github.com/jamesramsay/hercule/blob/master/examples/api-blueprint/gist-fox.apib
๊ทธ๋ฆฌ๊ณ
https://github.com/jamesramsay/hercule/blob/master/examples/api-blueprint/blueprint/gists.md
์ด๊ฒ์ด ๋น์ ์๊ฒ ํจ๊ณผ๊ฐ ์์ต๋๊น?
@zdne ํ๋ก์ฐ ํ์ง ์์ต๋๋ค.
์ด ๋ ๊ฐ์ง ์๋ ๋ณ๋ก ๋ณด์ฌ์ฃผ์ง ์์ต๋๋ค. ๋ด๊ฐ ๋ฌด์์๋ณด๊ณ ์์ต๋๊น?
@zdne : ์, .md/.apib ๋๋ xml, json ๋ฑ ๋ชจ๋ ์ ํ์ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ํฌํจํ ์ ์๋ ํ ์ข์ต๋๋ค.
๊ทธ๊ฒ์ ์๋ด์ฅ์์ ๊ตฌํํ ๊ฒ์ ๋๊น, ์๋๋ฉด ๊ทํ์ ๋ฉ์์ง๊ฐ ์๋ด์ฅ์ ์ปค๋ฐํ๊ธฐ ์ ์ hercule๋ฅผ ์ฌ์ฉํ๋๋ก ์กฐ์ธํ๋ ๊ฒ์ ๋๊น?
์์ ์ ์ฒญ์ฌ์ง์ ์ฌ๋ฌ ํ์ผ๋ก ๋ถํ ํ๊ณ ์ธ๋ถ ์์ฐ์ ์ฌ์ฉํ๊ธฐ ์ํ ์๋ฃจ์ ๋ชฉ๋ก์ ์ค๋นํ์ต๋๋ค. https://gist.github.com/zdne/137396a1c2d45f75b306
@jamesramsay ๋ ์ฒญ์ฌ์ง์ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ ๋ฐ ์ฌ์ฉํ๊ณ ์ถ์ ๊ตฌ๋ฌธ์ ๊ตฌํํ๋ ๋ฉ์ง Hercule ๋๊ตฌ๋ฅผ
์ธ๋ถ ์์ฐ์ ๊ฒฝ์ฐ. Hercule๋ ๊ฑฐ๊ธฐ์์ ์๋ํ์ง๋ง ์ด๊ฒ์ด ์ต์ข ๊ตฌ๋ฌธ์ด์ด์ผ ํ๊ณ ํนํ MSON ์ ํ๋ฆฌ์ฆ์ ํตํด JSON blob ๋ด๋ถ์์ ์ฌ์ฉ์ ์ ์ํด์ผ ํ๋์ง ํ์คํ์ง ์์ต๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ Apiary ๋ด๋ถ ํธ์ง์ ์์กดํ์ง ์๋๋ค๋ฉด ์ค๋ Hercule๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ธฐ๋ฅ์ ๋๋ถ๋ถ์ ์ป์ ์ ์์ต๋๋ค.
Apiary๊ฐ ๊ตฌํํ ๊ฒ์ ๋๊น?
์ฐ๋ฆฌ๋ :[](url)
๊ตฌ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ถ transclusion์ ๊ตฌํํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ ์ต๋๋ค. ์ฌ๊ธฐ์ ์บ์น๋ "ํ์ผ ์์คํ
"์ Apiary ํธ์ง๊ธฐ ๋ฐ ๊ตฌํ์
๋๋ค. ๊ทธ๋๊น์ง๋ Hercule์ ์ฌ์ฉํ๊ณ ์ฐ๊ฒฐ๋ ํ์ผ์ Apiary์ ํธ์ํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ๋ช ํํด ์ก์ต๋๊น?
์ฌ๊ธฐ์ ์บ์น๋ "ํ์ผ ์์คํ "์ Apiary ํธ์ง๊ธฐ ๋ฐ ๊ตฌํ์ ๋๋ค.
URL์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ฐํํ ์ ์์ต๋๊น?
๋ฌธ์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ๊ฐ๋ฅํ์ง๋ง ํธ์ง์ฉ์ ์๋๋๋ค.
ํ์ฌ Apiary์ ์ฐ๊ฒฐ๋ git ์ ์ฅ์์ Apiary ์ฒญ์ฌ์ง์ด ์ ์ฅ๋์ด ์์ต๋๋ค. ์ฒญ์ฌ์ง์๋ JSON ์คํค๋ง๋ฅผ ํธ์คํ
ํ๋ ๋ด๋ถ ์๋ฒ์ ๋ํ ๋ง์ ๋งํฌ๊ฐ ์์ต๋๋ค.
์ด ์๋ฃจ์
์ ์ฌ์ฉํ๋ฉด ์๋ณธ Markdown ํ์ผ์ด ์๊ณ Git ํํฌ ๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์คํด๋ฃจ์ ์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋๊ธฐํ๋ ์ฒญ์ฌ์ง์ผ๋ก ์ปค๋ฐํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ํธ๋์คํด๋ฃจ์ ํ๋ก์ธ์ค๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฝ๊ฐ์ ๋ฒ๊ฑฐ๋ก์์ด ์์ง๋ง ์๋ํ๋ฉด ๋งค๋๋ฝ๊ฒ ๋ ๊ฒ์ด๋ฏ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฌ ํด์!
@lpbm Hercule์ ๋ก์ปฌ ํ์ผ(์๋ ํ์ผ ๊ฒฝ๋ก)๊ณผ ์๊ฒฉ ํ์ผ(URL)
@jonathancrosmer spot on - ๋ด๋ถ CI ํ๊ฒฝ์์ Jenkins๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์์ ์ ์ํํฉ๋๋ค. Adslot์์๋ ์ปค๋ฐ์ด ๋ถ๊ธฐ์ ํธ์๋ ๋๋ง๋ค ๋จ์ ํ ์คํธ์ ํจ๊ป Hercule๋ก API Blueprint๋ฅผ ์ปดํ์ผํ ๋ค์ drredd์ ์ ๋ฌํฉ๋๋ค. ๋ชจ๋ ํต๊ณผํ๋ ๊ฒฝ์ฐ ๋ฐฐํฌ ์์ ์ ์ผ๋ถ๋ก ์ ํ์ ์ผ๋ก Apiary์ ํธ์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ API ๋ฌธ์๊ฐ ๋ณ๊ฒฝ๋์๋ง์ Apiary์ ์ง์ ํธ์ํ์ง๋ง ๊ธฐ๋ฅ ์ค์์น ๋ฑ์ผ๋ก ๋ ํฐ ๋ฆด๋ฆฌ์ค๋ฅผ ์์ ํ ๋ ๋๋๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ฌ ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํจ๊ป ๋ฐฐํฌํฉ๋๋ค.
์ผ๋ฐ URI๋ฅผ ์ง์ ํ๋๋ก ํ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ๋ ๋๋ฌ๋ URI๋ฅผ ๋งํฌ๋ก ๋ ๋๋งํ ์ง ์๋๋ฉด ๋ฌธ์ ์ถ๋ ฅ์ ํด๋น ์ฝํ ์ธ ๋ฅผ ํฌํจํ ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ํ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ Markdown ํ๋ฏธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์๊ณ ๋ฅผ ๋์ด์ค๋๋ค.
์ผ๋ฐ URI๋ฅผ ์ง์ ํ๋๋ก ํ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
๊ทธ๋์ผ ํ๋ค. [label](URI)
๋ ํธ๋์คํด๋ฃจ์
์ ์ฌ์ฉ๋์ด์ผ ํ๋ฉฐ ์ ๋ ๋๋ง๋์ด์ผ ํฉ๋๋ค. ์ฐจ์ด์ ์ transclustion ๋๊ตฌ์ ๊ฒฝ์ฐ ํ์ํด์ผ ํ๋ฏ๋ก :[label](URI)
์๋ ํ์ธ์,
์ด์ ๋ํ ์์์ด ์์ต๋๊น?
์คํค๋ง์ ์์ ๋ API ๋ฌธ์์ ๋ณธ๋ฌธ๊ณผ ๋ถ๋ฆฌ๋์ด์ผ ์๋ฒ ๋ฐ/๋๋ ํด๋ผ์ด์ธํธ์์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ๋จ์ ํ
์คํธ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋งํฌ๋ ๊ด์ฐฎ์ต๋๋ค.
๊ฑด๋ฐฐ,
ํ๋ง์ค
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ๋ฆ๊ฒ ์์ ์ค๋๋ ๋ฌผ๊ฑด์ ๋ค์ ์ด์ด์ ์ฃ์กํฉ๋๋ค. ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ฅ์๊ฐ ์๋๋ผ๋ฉด ์ ๋ฅผ ์ฉ์ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฒญ์ฌ์ง ๋ชจํ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฐ๊ตฌ๋ฅผ ํ๋ฉด์ ์ด ํ ๋ก ์ ์ฐพ์๊ณ ์ด๊ฒ์ด ์ง๊ธ๊น์ง ๋ด๊ฐ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ์ ๋๋ค.
๋ด ์๋ต์ ๋ชจ๋ธ๋ณ๋ก ๋ถํ ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. (. ๋ชจ๋ธ์ ๋ค๋ฅธ ํด๋๋ก ์ฐธ์กฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ์์ต๋๊น?
๋ด ์ฒญ์ฌ์ง ํด๋ ์์ ๋ด ๋ชจ๋ ์์ฒญ์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ถ๋ฆฌ๋ ๋ชจ๋ธ ํด๋์ ๋ด ๋ชจ๋ ์ํฐํฐ ๋ชจ๋ธ(MSON/MD/JSON/๋ฌด์์ด๋ ์ ํฉํ ํ์ผ)์ ๋ฃ์ด ๋ค๋ฅธ ์๋ต์ผ๋ก ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๊ตฌ๋ ์ง์ด ์ผ์ ์ฑ๊ณต์ ์ผ๋ก ์ํ ํ์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ๋ ์ด ๊ธฐ๋ฅ์ ๊ด์ฌ์ด ์์ผ๋ฉฐ ๋์ค์๋ผ๋ ๋นจ๋ฆฌ ์ถ๊ฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฐ๋ฆฌ์ ํน์ ์ฌ์ฉ ์ฌ๋ก๋ ์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ์ด Apache Avro์ ์ํด ์์ฑ๋ ์ด์ง ๊ตฌ์กฐ์ธ API๋ฅผ ๋ฌธ์ํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์์ฒญ/์๋ต์ ๊ฒฝ์ฐ "์คํค๋ง"๊ฐ Avro ์คํค๋ง ์ ์ ํ์ผ ๋๋ ํด๋น Avro ์คํค๋ง๋ฅผ ์ค๋ช ํ๋ ์์ฑ๋ HTML ๋ฌธ์์ ๋ํ ๋งํฌ๊ฐ ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.