Api-blueprint: ์™ธ๋ถ€ ์ž์‚ฐ

์— ๋งŒ๋“  2013๋…„ 08์›” 14์ผ  ยท  43์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: apiaryio/api-blueprint

์ž์‚ฐ์ด ์˜ˆ์ƒ๋˜๋Š” ๋ชจ๋“  ์œ„์น˜(์˜ˆ: ํŽ˜์ด๋กœ๋“œ ๋ณธ๋ฌธ ๋˜๋Š” ์Šคํ‚ค๋งˆ)์— Markdown ๋งํฌ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Language Idea Feature

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

์ €๋Š” ์ด ๊ธฐ๋Šฅ์— ๊ด€์‹ฌ์ด ์žˆ์œผ๋ฉฐ ๋‚˜์ค‘์—๋ผ๋„ ๋นจ๋ฆฌ ์ถ”๊ฐ€๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ณธ๋ฌธ์ด 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)

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

์ €๋Š” ์ด ๊ธฐ๋Šฅ์— ๊ด€์‹ฌ์ด ์žˆ์œผ๋ฉฐ ๋‚˜์ค‘์—๋ผ๋„ ๋นจ๋ฆฌ ์ถ”๊ฐ€๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ณธ๋ฌธ์ด 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 ).

= ๊ตฌ๋ฌธ์„ ์˜ˆ์ œ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ! ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋œ ๊ตฌ๋ฌธ(์ง์ ‘ ๋งํฌ, ๋ช…์‹œ์  ๋˜๋Š” ์•”์‹œ์  ๋ ˆ์ด๋ธ”)์— ๊ด€๊ณ„์—†์ด ์ถ”๊ฐ€ ๊ธฐํ˜ธ๋กœ ๋งˆํฌ๋‹ค์šด์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ด์— ๋™์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ธ์žฅ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€
  2. ์˜ˆ์ œ/ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉํ•  ์Šคํƒ€์ผ

๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” 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/๋ฌด์—‡์ด๋“  ์ ํ•ฉํ•œ ํŒŒ์ผ)์„ ๋„ฃ์–ด ๋‹ค๋ฅธ ์‘๋‹ต์œผ๋กœ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€์ด ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ ํ–ˆ์Šต๋‹ˆ๊นŒ?

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