Api-blueprint: ๊ทธ๋ฃน ๋‚ด์—์„œ ๋‘˜ ์ด์ƒ์˜ ์„น์…˜ ์„ค์ •

์— ๋งŒ๋“  2014๋…„ 10์›” 28์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: apiaryio/api-blueprint

์•ˆ๋…•ํ•˜์„ธ์š”, ํŠน์ • ๊ทธ๋ฃน์— ์—ฌ๋Ÿฌ ์„น์…˜(์ปฌ๋ ‰์…˜ ๋ฆฌ์†Œ์Šค ์•„๋‹˜)์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ์„น์…˜์—์„œ๋งŒ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์„น์…˜์—์„œ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

FORMAT: 1A
HOST: https://sample

# sampleapi
Sample API

# Group Print
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum 

## Authentication
Resource related to user auth
## User collection [/users]
### List all users [GET]
+ Response 200 (application/json)

        [{
            "id": "mkim",
            "email": "[email protected]", 
            "firstName": "Maxim",
            "lastName": "Kim"
        }, { ... }
        ]

### Register new user account [POST]
+ Request (application/json)

            {
                "email": "[email protected]", 
                "firstName": "Maksim",
                "lastName": "Kim",
                "password": "cheburator"
            }

+ Response 201
    + Headers

            Location: https://sample

## Print docs
Resource related to prints
## Print collection [/print]
### List all users [GET]
+ Response 200 (application/json)

        [{
            "id": "mkim",
            "email": "[email protected]", 
            "firstName": "Maxim",
            "lastName": "Kim"
        }, { ... }
        ]

### Register new user account [POST]
+ Request (application/json)

            {
                "email": "[email protected]", 
                "firstName": "Maksim",
                "lastName": "Kim",
                "password": "cheburator"
            }

+ Response 201
    + Headers

            Location: https://sample

์ด ์˜ˆ์—์„œ "๊ทธ๋ฃน ์ธ์‡„" ๋‚ด๋ถ€์˜ ์ฒซ ๋ฒˆ์งธ ์„น์…˜์œผ๋กœ "์ธ์ฆ"์ด ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ "๋ฌธ์„œ ์ธ์‡„"๊ฐ€ ๋‹ค๋ฅธ ์„น์…˜์œผ๋กœ ํ‘œ์‹œ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์–‘๋ด‰์žฅ ๋ฌธ์„œ์—์„œ ์ด ์„น์…˜(์ธ์‡„ ๋ฌธ์„œ)์€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด๋ฏธ์ง€๊ฐ€ ์ฒจ๋ถ€๋จ). ๋‚ด๊ฐ€ ๋ญ˜ ์ž˜๋ชปํ•˜๊ณ  ์žˆ์ฃ ?

screen shot 2014-10-28 at 11 14 43 am

Question

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

@spark-ftw ๋ถˆํ–‰ํžˆ๋„ ์ฒซ ๋ฒˆ์งธ ์ œ๋ชฉ Authentication ์€ Print ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์„ค๋ช…์— ์ฒจ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์€ ๋ฆฌ์†Œ์Šค ์ œ๋ชฉ ๋ฐ”๋กœ ์•„๋ž˜์— ํ‘œ์‹œ๋˜๊ณ  ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋Š” ์•„๋ž˜์— ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ๊ทธ๋ฃนํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์•ฝ๊ฐ„ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฆ ๊ทธ๋ฃน

    • ์‚ฌ์šฉ์ž ๋ฆฌ์†Œ์Šค ์ˆ˜์ง‘

    • ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋‚˜์—ด

    • ์ƒˆ ์‚ฌ์šฉ์ž ๊ณ„์ • ๋“ฑ๋ก

  • ์ธ์‡„ ๊ทธ๋ฃน

    • ...

์ฒจ๋ถ€๋œ ์ด๋ฏธ์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด๋ฏธ ๊ทธ๋ฃน์ด ์žˆ์Šต๋‹ˆ๋‹ค. "์ธ์‡„ ๊ทธ๋ฃน"์ด๊ณ  "์ธ์ฆ" ๋ฐ "๋ฌธ์„œ ์ธ์‡„"๋Š” "์ธ์‡„ ๊ทธ๋ฃน"์˜ ์ž์‹์ด๋ฏ€๋กœ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ

@spark-ftw @kylef๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค( User Collection )๋ฅผ ์ด๋ฏธ ์„ค๋ช…ํ•œ ํ›„์—๋Š” ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน( Group Print ) ๋‚ด์—์„œ ์ž„์˜์˜ ๋งˆํฌ๋‹ค์šด ์„ค๋ช…์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( @kylef๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

# Group Authentication

## Authentication
Resource related to user auth

## User collection [/users]

### List all users [GET]
+ Response 200 (application/json)

            {}

### Register new user account [POST]
+ Request (application/json)

            {}

+ Response 201

            {}

# Group Print

## Print docs
Resource related to prints

## Print collection [/print]

### List all users [GET]
+ Response 200 (application/json)

            {}

### Register new user account [POST]
+ Request (application/json)

            {}

+ Response 201

            {}

ํŽธ์ง‘ : ์ž‘์€ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ์ฃผ์„์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ ์„น์…˜ ์•ˆ์— ์—ฌ๋Ÿฌ ์„น์…˜์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์„น์…˜ ์ธ์‡„

-- ์ธ์ฆ ๊ทธ๋ฃน

--- ์‚ฌ์šฉ์ž ์ปฌ๋ ‰์…˜

--- ์ธ์ฆ ์ˆ˜์ง‘

-- ๋ฌธ์„œ ๊ทธ๋ฃน

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ธ์‡„

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ €์žฅ

  • ๋“œ๋ผ์ด๋ธŒ ์„น์…˜

-- ์ธ์ฆ ๊ทธ๋ฃน

--- ์‚ฌ์šฉ์ž ์ปฌ๋ ‰์…˜

--- ์ธ์ฆ ์ˆ˜์ง‘

-- ๋ฌธ์„œ ๊ทธ๋ฃน

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ธ์‡„

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ €์žฅ

...

๊ฐ์‚ฌ

์–ด๋–ค ์•„์ด๋””์–ด?

@spark-ftw ์•„๋ž˜ ์ฝ”๋“œ์— !comments ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. TL;DR ๊ท€ํ•˜์˜ ํ‘œ์ œ ##์ธ์ฆ์€ ์ž์› ์„ค๋ช…์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ๋ฃน ์„ค๋ช…์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฃน์—์„œ ์ฒซ ๋ฒˆ์งธ ๋์ ์„ ์ •์˜ํ•˜๋ฉด ๊ทธ๋ฃน ์„ค๋ช…์„ ์ข…๋ฃŒํ•˜๊ณ  ๋ฆฌ์†Œ์Šค ๋์ ์œผ๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

FORMAT: 1A
HOST: https://sample

# sampleapi
Sample API

! group definition starts here with name, and description following
# Group Print
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum 

## Authentication <--- part of description above
Resource related to user auth <--- part of description above

! First endpoint definition starts here, group description ends here.
## User collection [/users]
### List all users [GET]
+ Response 200 (application/json)
        [...]

### Register new user account [POST]
+ Request (application/json)
            { ... }
+ Response 201
    + Headers
            Location: https://sample

## Print docs <-- this is not another endpoint / resource definition, but a description instead...
Resource related to prints <-- this is not another endpoint / resource definition, but a description instead...

! another resource endpoint is defined below, that is ok.
## Print collection [/print]
### List all users [GET]
+ Response 200 (application/json)
    [...]

์ข‹์•„, ์–ด๋–ป๊ฒŒ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@spark-ftw ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ณ ์ง‘ํ•˜๋ฉด ์›ํ•˜๋Š” ์ œ๋ชฉ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Group Print Authentication
  - User Collection
    - List all
    - Register new...
Group Print Docs
Group Drive Authentication
Group Drive Docs
...

์ฃ„์†กํ•˜์ง€๋งŒ ๋” ๋งŽ์€ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Apiary์˜ ๋ฌธ์„œ ํƒ์ƒ‰์—์„œ ์ด๋Ÿฌํ•œ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œˆ-์œˆ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

๋‚ด ์š”์ฒญ์„ ๋‹ค์‹œ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

- ์ธ์‡„ ์„น์…˜

-- ์ธ์ฆ ๊ทธ๋ฃน

--- ์‚ฌ์šฉ์ž ์ปฌ๋ ‰์…˜

--- ์ธ์ฆ ์ˆ˜์ง‘

-- ๋ฌธ์„œ ๊ทธ๋ฃน

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ธ์‡„

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ €์žฅ

๋“œ๋ผ์ด๋ธŒ ์„น์…˜

-- ์ธ์ฆ ๊ทธ๋ฃน

--- ์‚ฌ์šฉ์ž ์ปฌ๋ ‰์…˜

--- ์ธ์ฆ ์ˆ˜์ง‘

-- ๋ฌธ์„œ ๊ทธ๋ฃน

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ธ์‡„

--- ๋ฌธ์„œ ์ปฌ๋ ‰์…˜ ์ €์žฅ

์ธ์‡„ ์™ธ์— ๋“œ๋ผ์ด๋ธŒ ์ œํ’ˆ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๊ณ„์ธต ์ˆ˜์ค€์ด ํ•„์š”ํ•จ)

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋งˆํฌ ๋‹ค์šด์€ ์ด๊ฒƒ์„ ์ง€์›ํ•˜์ง€๋งŒ ์–‘๋ด‰์žฅ ๋งŒ ๊ตฌ๋ฌธ ๋ถ„์„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ...

@spark-ftw Apiary์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. Resource Endpoints ์‚ฌ์ด์— ์„ค๋ช…์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Apiary Editor์—์„œ Warnings/Issues๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ฑฐ๊ธฐ์— Warning์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์–‘์— ๋”ฐ๋ฅด๋ฉด https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md#def -section-structure - Group ์„น์…˜์—๋Š” ๋‹ค์Œ ๋ถ€๋ถ„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์ด๋ฆ„ , ๊ทธ๋ฃน ์„ค๋ช…, ๊ทธ๋ฃน ๋ฆฌ์†Œ์Šค. ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์„ค๋ช…์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค.

Markdown๊ณผ API Blueprint๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ - ๋Œ€์‹  ์„ ํ˜•, ๋น„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

@spark-ftw Group ํ‚ค์›Œ๋“œ๋Š” ์ƒˆ๋กœ์šด Section ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
API Blueprint๋Š” 3๋‹จ๊ณ„ ์ค‘์ฒฉ์„ ์ „ํ˜€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์„ค๋ช…์— ๋งํฌ๋œ ์‚ฌ์–‘ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ทธ๋ž˜์„œ ๋‚ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์—†์Šต๋‹ˆ๊นŒ?

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