ã¢ã»ãããæåŸ ãããå ŽæïŒãã€ããŒãæ¬äœãã¹ããŒããªã©ïŒã§ããŒã¯ããŠã³ãªã³ã¯ã䜿çšããå¯èœæ§ãè¿œå ããŸãã
ç§ã¯ãã®æ©èœã«èå³ããããçæ³çã«ã¯åŸã§ã§ã¯ãªãæ©ãè¿œå ããããšæã£ãŠããŸãã
ç§ãã¡ã®ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã¯ããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®æ¬æãApacheAvroã«ãã£ãŠçæããããã€ããªæ§é ã§ãã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ã§äœ¿çšãããŠãããç¬èªã®ä¿¡é Œã§ããããã¥ã¡ã³ããããããã¹ããŒãã¯ãåã蟌ã¿ã«é©ããªã圢åŒã§ãã ãããã®äŸã¯ã¹ããŒãåºæã§ãããä»ã®ãã€ããŒãã¿ã€ãã«ãåæ§ã®çç±ãåœãŠã¯ãŸããšæããŸãã
@ 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)
ãŸãã¯ãMardkown _implicit link name_ã䜿çšããŸãã
:[path/to/file.json]()
ãŸã
=[path/to/file.json]()
ããã«ã¡ã¯ã
å€éšãªã³ã¯ãæã€å¥ã®ãŠãŒã¹ã±ãŒã¹ã¯æ¬¡ã®ãšããã§ããAPIã®å±æ§ã®å®çŸ©/説æãããã¹ãŠã®ããã¥ã¡ã³ãã§äœ¿çšããããã¹ã¿ãŒçšèªéã®ããããã®å®çŸ©ã«ãªã³ã¯ããããšæããŸãã ããã«ããããã¹ãŠã®ããã¥ã¡ã³ããææ°ã®ç¶æ
ã«ä¿ã¡ãåæãä¿ã€ããã®æãéããããšæããŸãã ãã以å€ã®å Žåã¯ãAPIããã¥ã¡ã³ããæŽæ°ããå¿
èŠããããŸãã åå¥ã«ãå®çŸ©ãåæããªãäœå°ãæ®ããŸãã
Markdownã¯ãã»ãšãã©äºææ§ã®ããæ¡åŒµæ©èœã®äžå¿«ãªç·©ãçµåãã¡ããªãŒã§ãããããããããŸãããããªã³ã¯ã®ãããªæ§æãå®éã«ãåç
§ã§ã¯ãªãåã蟌ã¿ããæå³ããå Žåã¯ãç»åæ§æïŒ ïŒ sigilã䜿çšïŒã®ã¿ã§ãã ïŒ ![Alt text](/path/to/image.jpg "Optional Title")
ãããã¯Gruberã®å
ã®ä»æ§ã®äžéšã§ãã Zã®ææ¡ã¯ããšããããã®æ§é ã«éåããŠããŸãïŒãã¡ã€ã«åãééã£ãå Žæã«ãããŸãïŒã æºæ ããæ¹ãè¯ãã®ã§ã¯ãªãã§ããããããã以å€ã®å Žåã¯æ¢åã®æ§æã«æ°ããå°ç« ã䜿çšããã ãã§ãã
è¯ãç¹@jrep ïŒ
æºæ ããæ¹ãè¯ãã®ã§ã¯ãªãã§ããããããã以å€ã®å Žåã¯æ¢åã®æ§æã«æ°ããå°ç« ã䜿çšããã ãã§ãã
ãããç§ã®ç®æšã§ãã
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][]
ããã§ãlablelã¯å®éã®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
ïŒã
äŸãšããŠ=
æ§æã䜿çšããŸããããåãããšã!
åœãŠã¯ãŸããŸãã
çŽæ¥ãªã³ã¯ãæ瀺çãŸãã¯æé»çãªã©ãã«ãªã©ã䜿çšãããæ§æã«é¢ä¿ãªããè¿œå ã®ã·ãžã«ã䜿çšããŠããŒã¯ããŠã³ããµããŒãããå¿ èŠããããšæããŸãã
ããã«åæããå Žåã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)
èãïŒ
ç§ã¯ãã¹ãŠã®æšæºããªã¢ã³ãããµããŒãããããšã«å šåã泚ãã§ããŸãããããã¯æ¬¡ã®ãšããã§ãã
= [path / to / file.json] []
[path / to / file.json]ïŒpath / to / file.json
...ç§ãGruberã®å®çŸ©ãç解ããæ¹æ³ã§ã¯ãããŸããã ããããç§ã¯honzajavorekã«åæããŸããæåã®[]ã«ãããã®ã¯ããªã³ã¯ããã¹ãã®åé·ã§é¢åãªè€è£œã§ã¯ãªããäœããã®åœ¢ã§äººéãèªããã¿ã°ã§ãã ãããã£ãŠãããã«ãã¹ãå«ããããšã¯æ§æçã«ã¯æå¹ã§ããããã«èŠããŸãããïŒaïŒå¥åŠã§ãïŒbïŒåœ¹ã«ç«ããªãã§ãã
æå³ããæ°ããå°ç« ãåããGruberã§æå¹ãªãªã³ã¯åœ¢åŒãã§ããå Žåãç§ã¯ãã®ã»ãã³ãã£ã¯ã¹ã奜ãã§ãããããã»ã©é©ãããšã§ã¯ãªãäŸãææ¡ããŸãïŒhonzajavorekãšç§ãææ¡ããçš®é¡ã®ïŒã
@ jrep @ honzajavorekåæããŸãã
ç»åãŸãã¯ãªã³ã¯ã®ããããã«ã€ããŠãã¢ã»ããã®å å«ãæ¢åã®ãã¿ãŒã³ãšæ¯èŒããã®ã¯é£ãããšæããŸãã ããã¯å®éã«ã¯ããã2ã€ã®çµã¿åããã§ã¯ãããŸãããïŒ
ç»åæ§æã®ã¢ãããžãŒã®åé¡ã¯ãç»åã®äžçã§ã¯ä»£æ¿ããã¹ããéèŠã§ãããéåžžãç¹å®ã®ã³ã³ããã¹ãã§éè€ããããšã¯ãªããå®éã«![img.jpg](/path/to/img.jpg)
æžããããªããšããããšã§ããã³ã³ãã³ã管çã·ã¹ãã ãšãæ æ°ãªãã ãã§ãã人ã
ã¯ãããããŸãã 代æ¿ããã¹ããèŠæ±ããããšã¯ãè¯ãç¿æ
£ãæããããšã§ãã
ããããè³ç£ã¯å¿ ããã代æ¿ããã¹ããå¿ èŠãšããŸãããããã¯æ¬åœã§ãã @zdneãè¿°ã¹ãããã«ããããã¯åžžã«ãããã§äœãèµ·ãã£ãŠããã®ããå®å šã«æ確ã«ãªããããªã³ã³ããã¹ãã§äœ¿çšãããŸãã ç§ã¯ããã«åæããŸãã åé¡ã¯ãç§ãèããããšãã§ããå¯äžã®ã¢ãããžãŒã¯ãã©ãã«ã®ãªããªã³ã¯ã§ãã
[Google](http://www.google.com)
察...
<http://www.google.com>
ïŒ Gruber ïŒhttp://www.google.com
ïŒä»æ¥ã®Markdownã®çŸå®ã ãšæããŸãïŒãã€ããªãããªãã®ãå¿ èŠãªå Žåã¯ãããããç»åã®èªåãªã³ã¯æ§æããšåŒã³ãŸããããå¯èœãªéãGruberã«æºæ ãããå Žåã¯ã次ã®ãããªãã®ãå¿ èŠã§ãã
=[Alternative text about assets](/dev/null)
â誰ããããã«ç²ŸéããŠãããããã¯äŸã«ããã¯ãã§ãïŒ_ããã¯ç»åã®ããã§ãçã«ããªã£ãŠããŸãïŒ_人ã
ã®é ã®äžã§é£ã³åºããŸãïŒ=[Alternative text about assets][id]
âåãã¢ã»ãããè€æ°ã®å Žæã«å«ããå Žå=</dev/null>
ãŸãã¯<=/dev/null>
âèªåãªã³ã¯æ§æïŒ_...ç»åã®èªåãªã³ã¯æ§æã¯ã©ã®ããã«ãªããŸããïŒ_ïŒãGruberã®èªåãªã³ã¯ã®ããŒãžã§ã³ã¯èª°ã«ãããããŸããïŒãªã³ã¯ã¯ã©ãã§ãèªåçã«å€æãããããã <
sãš>
sïŒã§ãããæ¬åœã«ä»£æ¿ããã¹ããå¿
èŠãªããããã«æ©ãŸãããŠããå Žåã¯ãããã䜿çšããæ¹æ³ãåŠã¶ããšãã§ããŸããããã§ããäŸãšããŠ=
ã䜿çšããŸãã ç§ã®æèŠã§ã¯ããããã¯æãèªã¿ããããå°ãªããšãGruber颚ã®ãœãªã¥ãŒã·ã§ã³ã§ãã ããšãã°ãç§ã¯èããŸã
[label3][]
[label3]: path/to/image.png
èªè ãšããŠã®ç§ã«ãšã£ãŠã¯ããªãäžå¯è§£ã§ãããæ¢åã®Markdownã®äœ¿çšæ³ã®çŸå®ã«åŸããªãããšã ç§ã¯ãã®ãããªå¯èœæ§ã«ã€ããŠããç¥ããŸããã§ãããç§ã¯ãã¢ãªã³ã°ããã©ã±ããã®2çªç®ã®ã«ããã«ã«ãã£ãŠè¡ãããªããã°ãªããªããšæããŸããã ïŒããããç§ã¯ãã®æåŸã®æ®µèœãéåžžã«äž»èŠ³çã§ããããšãå®å šã«æ¿ç¥ããŠããŸãïŒã
@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"ãèš±å¯/矩ååããããšãå®éã«ææ¡ããŠããŸããïŒ ãããšãåãªããã¬ãŒã¹ãã«ããŒã§ãããïŒ
ç§ããåç §ãªã³ã¯ãã䜿çšããããšã¯ãããŸããããBlueprintãããããåŒãç¶ãããšã«å察ããã€ããã¯ãããŸããã
@jrepãã¬ãŒã¹ãã«ããŒãšããŠ/dev/null
ã䜿çšããŸãã:)
ã»ã¯ã·ã§ã³ããããŒã§çŽæ¥ãªã³ã¯ã䜿çšããŠããå®éã«ã¯ãŸã£ããæªãã¯ãããŸããã ãã¡ãããããã¯äžèŠããã ãã§ãç§ã¯ãã®ãããªããšã®çæãäœã§ãããã«ã€ããŠæ¬åœã«èããŠããŸããã§ãããããã...äžèŠããã¯ç§ã«é åçã§ããããã«èŠããŸãã
@jrepç§ã¯ããã奜ãã§ãã
ããã«é²ãã§
# Notes [/notes]
## GET
+ Response 200
+ =[Body](path/to/body.json)
+ =[Schema](path/to/schema.json)
ãã¡ã€ã«ãåå¥ã®ãã¡ã€ã«ã«åå²ããŠããã€ã³ããŒãããæ©èœã¯ãé·ãåé·APIã«éåžžã«åœ¹ç«ã¡ãŸãã
äžéæã«ã¯ãç§ã¯èªåã®éåçãããžã§ã¯ããããªã声ã§ç®¡çããŸãã ç§ã¯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ããã¯ããªããã¡ããšããŠããŸãïŒ å ±æããŠããã ãããããšãããããŸãã ç§ãïŒä»ã®å Žæã§ïŒèšã£ãããã«ãç§ãã¡ã¯ããŒãµãŒããŒãã¹ããŒã«ã®äœæ¥ãéå§ããŸãããããã¯æçµçã«ãããåŠçããå¿ èŠããããŸãã
ãŸãããã®äŸ¡å€ã®ããã«ãè€æ°ã®ãã«ãŒããªã³ãã1ã€ã«æ§æããApiaryã¯ã©ã€ã¢ã³ãgemhttps ïŒ //gist.github.com/danvine/11087404ã䜿çšããŠå ¬éããã¹ã¯ãªããã次ã«ç€ºããŸã
@alexborisov ãããã¯æ¬åœã«è³¢ã
@skawaguchi gulp -file-includeã䜿çšããŠgulpã¿ã¹ã¯ãäœæããjsonãç£èŠããŠAPIãæ§ç¯ã§ããŸãã å¯äžã®æ¬ ç¹ã¯ã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}}
ãã¬ãŒã¹ãã«ããŒã¯ããã®èŠªãã¡ã€ã«ã®1ã€ã«ãã£ãŠæå®ãããã¿ãŒã²ãããã¡ã€ã«ãæã€ããšãã§ããŸãã ããã¯ãã»ãŒåã倧èŠæš¡ãªã¹ããŒãã«åœ¹ç«ã€ããšãããããŸããã
@jamesramsay
Markdownç¬èªã®[<placeholder>](link)
ã®ä»£ããã«{{link}}
æ§æã䜿çšããçç±ãç¥ãããã ãã§ããïŒ äžã§è°è«ããããã«ã äŸãã°ïŒ
=[gist](gist.apib)
ãŸã
:[gist](gist.apib)
ããã¯åæ§ã«æ©èœããããŒã¯ããŠã³ãšããŠåççã«ã¬ã³ããªã³ã°ãããã®ã§ããªã³ã¯ãããã²ãŒãããããšãã§ãã `[placeholder]ãªã³ã¯ãªãã·ã§ã³ã§[placeholder][]
ãªã©ã®ã¯ããã«è±å¯ãªæ§æã䜿çšã§ããŸã...
@zdneããã¯æ¬åœã«çŽ æŽãããææ¡ã§ãïŒ æ®å¿µãªããã6ãæåã«ãã®ã¹ã¬ãããèŠãŠããŸããã§ããã
{{link}}
æ§æã¯ã MultiMarkdown4ã®ãã©ã³ã¹ã¯ã«ãŒãžã§ã³æ§æã«åºã¥ããŠããŸããã ããã¯ããªãã¯ãè¡ããç§ã¯æ°ããæ§æãçºæããŠããŸããã§ããã
åœæãç§ã¯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ãã¡ã€ã«ãäºããå«ããããšãã§ããã¡ã«ããºã ãããå Žåã圌ãã®äžè²«æ§ãç¶æããããšã¯éåžžã«å®¹æã«ãªãã衚地ã¢ãã«ãå€æŽãããå Žåã§ããã©ãã§ãå€æŽããå¿
èŠã¯ãããŸããã
ãã°ããèããŠãJSONãã¡ã€ã«ããµããŒãããæ§æãäœæããŠã¿ãŸãããããç§ã®åªåã§ãã
Pythonå®è£
ã®ã€ã³ã¯ã«ãŒãsytanxïŒ https ïŒ
åã®å Žåã®æ§æã¯æ¬¡ã®ããã«ãªããŸãã
{
"username": "alice",
"comments": [
{
"...": "include(commend_model.json)"
}
]
}
{ "...": "include(commend_model.json)"}
ã䜿çšããŠã commend_model.json
ãã¡ã€ã«ãžã®ã€ã³ã¯ã«ãŒããè¡šããŸãã
APIãã«ãŒããªã³ãã®ç¹æ®ãªã±ãŒã¹ã§ã¯ãããŸããããã€ã³ã¯ã«ãŒãæ©èœãåããJSONèªäœãèããããšããã®ã¯ããªãäžè¬çãªããšã§ããããã¯ãAPIãã«ãŒããªã³ãã§ã䜿çšã§ãããšæããŸãã
èŠãŠãããã€ãã®ææ¡ãããŠãã ãããçŸåšããã®json-includeã¯ç§ã®ãããžã§ã¯ãã®ããã€ãã§æ£åžžã«æ©èœããŠããŸãããããè¯ããŠæå³ããããã©ãããèªåã§å€æã§ããªãã®ã§ãããã«ã€ããŠã®èãã¯éåžžã«ãããããã§ãïŒ ïŒ
ãã@reorx ïŒ ã¢ã€ãã¢ãå ±æããŠããã ãããããšãããããŸãã æè¿ãAPIãã«ãŒããªã³ãã§ïŒã ãã§ãªãïŒããŒã¿ãèšè¿°ããããã®æ§æã§ããMSONã®ïŒããŒã¿ïŒã
ããªãã®äŸã䜿çšãããšãããã¯æ¬¡ã®ããã«æ©èœããŸãïŒ
# Data Structures
## User
- username: alice
- comments (array[Comment])
## Comment
- id: 1
- content: hello
次ã«ãJSONãšããŠã¬ã³ããªã³ã°ããããã«äŸé Œã§ããŸãã
# Resource [/r]
## Retrieve [GET]
+ Response (application/json)
+ Attributes (User)
ã©ãæããŸããïŒ ããã¯ããªããå©ããŸããïŒ
ãã®æ©èœã¯ãã€ãã©ã€ã³ã®ã©ããã«ãããŸããïŒ ããã¯ç§ãã¡ã«ãšã£ãŠãšãŠãããããšã§ãã
ãã«ãŒããªã³ãã䜿çšããŠã¡ãœãããèšè¿°ããŸãããJSONã¹ããŒãã¯åå¥ã«ãã¹ããããŸãã çŸåšããªã¯ãšã¹ã/ã¬ã¹ãã³ã¹èŠçŽ ã§ã¯ãµããŒããããŠããªããããã¡ãœããã®èª¬æã«ãªã³ã¯ãšããŠã¹ããŒããå«ããå¿
èŠããããŸãã
å®éã«æãçæ³çãªã®ã¯ãrequest / responseèŠçŽ ã®äžã®ãªã³ã¯ã䜿çšããŠJSONã¹ããŒãWebããŒãžããã€ã³ã¯ã«ãŒããã§ããå Žåã§ãããããã¥ã¡ã³ãããŒãžã®ããŒãæã«äœçŸãã®ã€ã³ã¯ã«ãŒããè¡ããªãããã«ãã¬ã€ãžãŒããŒãããå¿
èŠããããŸãã
ãªã¯ãšã¹ã/ã¬ã¹ãã³ã¹ã®æ¬æã®äŸãå®çŸ©ã¹ããŒããã¡ã€ã«ã®å€éšåç §ãå«ããããšãã§ããªããšããäºå®ã¯ãBlueprintãä»ã®APIå®çŸ©èšèªã«é¢ããŠæã€_éåžžã«_倧ããªæ¬ ç¹ã®1ã€ã ãšæããŸãã
+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ç§ã¯
ãããã®2ã€ã®äŸã¯ããŸã瀺ããŠããŸããã ç§ã¯äœãèŠãŠããŸããïŒ
@zdne ïŒã¯ãã.md / .apibã§ãxmlã§ããããããã¿ã€ãã®å€éšãªãœãŒã¹ãå«ããããšãã§ããéããjsonã¯åé¡ãããŸããã
ããã¯é€èå Žãå®è£ ãããã®ã§ããããããšãé€èå Žã«ã³ãããããåã«ãã©ã¯ã¬ã¹ã䜿çšããããã«ç§ãã¡ã«ã¢ããã€ã¹ããã¡ãã»ãŒãžã§ããïŒ
以åããã«ãŒããªã³ããè€æ°ã®ãã¡ã€ã«ã«åå²ããïŒããã³å€éšã¢ã»ããã䜿çšããïŒããã®ãœãªã¥ãŒã·ã§ã³ã®ãªã¹ããçšæããŸããïŒ https ïŒ//gist.github.com/zdne/137396a1c2d45f75b306
@jamesramsayã¯ãéåçãè€æ°ã®éšåã«åå²ããããã«äœ¿çšãããæ§æãå®è£ ããçŽ æŽãããHerculeããŒã«ããŸãšããŸããã
å€éšè³ç£ã«ã€ããŠã¯ã Herculeã¯ããã§ãæ©èœããŸããããããæçµçãªæ§æã§ãããã©ããã¯ããããŸãããç¹ã«
ããã§ããApiaryå ã§ã®ç·šéã«äŸåããªãå Žåã¯ãä»æ¥Herculeã䜿çšããŠãã®æ©èœã®ã»ãšãã©ãååŸã§ããŸãã
ããã¯Apiaryãå®è£ ãããã®ã§ããïŒ
ã¯ãã :[](url)
æ§æã«åºã¥ããŠãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãå®è£
ããããšæããŸãã ããã§ã®èœãšãç©Žã¯ãApiaryãšãã£ã¿ãŒãšããã¡ã€ã«ã·ã¹ãã ãã®å®è£
ã§ãã ãããŸã§ã¯ãHerculeã䜿çšããŠãé£çµããããã¡ã€ã«ãApiaryã«ããã·ã¥ããå¿
èŠããããŸããã
ããã¯æ確ã§ããïŒ
ããã§ã®èœãšãç©Žã¯ãApiaryãšãã£ã¿ãŒãšããã¡ã€ã«ã·ã¹ãã ãã®å®è£ ã§ãã
ãã¶ãããªãã¯URLã䜿ã£ãŠãããåé¿ããããšãã§ããŸããïŒ
ããã¥ã¡ã³ãããã§ããããããã«ããããã¯ãããããç·šéã®ããã§ã¯ãããŸããã
çŸåšãApiaryã«æ¥ç¶ãããŠããgitãªããžããªã«Apiaryãã«ãŒããªã³ããä¿åãããŠããŸãã ãã«ãŒããªã³ãã«ã¯ãJSONã¹ããŒãããã¹ãããå
éšãµãŒããŒãžã®ãªã³ã¯ãå€æ°ãããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãå
ã®Markdownãã¡ã€ã«ããããGitããã¯ãªã©ã䜿çšããŠãã©ã³ã¹ã¯ã«ãŒãžã§ã³ãå®è¡ããåæããããã«ãŒããªã³ããšããŠçµæãã³ããããããšæããŸãã ãããããŸãããããã«èãããŸãã ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ããã»ã¹ãèšå®ããã®ã¯å°ãé¢åã§ãããããŸããããšã¹ã ãŒãºã«ãªãã®ã§ã調ã¹ãŠã¿ãŸãã ããããšãïŒ
@lpbm Herculeã¯ãããŒã«ã«ãã¡ã€ã«ïŒçžå¯Ÿãã¡ã€ã«ãã¹ïŒãšãªã¢ãŒããã¡ã€ã«ïŒURLïŒã®äž¡æ¹ã®ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ããµããŒããããããŒã¯ããŠã³ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ããšã©ãã«ä»ããããŠããŸãããä»»æã®ããã¹ããã¡ã€ã«ïŒ.mdã.apibã.jsonã.xmlãªã©ïŒããµããŒãããå¿ èŠããããŸãã äžéšã®äººã ãHerculeã䜿çšããŠããã®ãšäŒŒãŠããå¯èœæ§ã®ãããŠãŒã¹ã±ãŒã¹ã®1ã€ã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠçæãããJSONã¹ããŒããHTTPçµç±ã§ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ããããšãšãããã¥ã¡ã³ãã®ãã©ã€ãã¹ãé«ããããã®ããŒã«ã«ãã¡ã€ã«ãã©ã³ã¹ã¯ã«ãŒãžã§ã³ã§ãã
@jonathancrosmerã®ã¹ããã-å éšCIç°å¢ã§Jenkinsã䜿çšããŠåæ§ã®ããšãè¡ããŸãã Adslotã§ã¯ãã³ããããããããã®ãã©ã³ãã«ããã·ã¥ããããã³ã«ãåäœãã¹ããšãšãã«API BlueprintãHerculeã§ã³ã³ãã€ã«ãããããdreddã«æž¡ããŸãã ãã¹ãŠãåæ Œããå Žåããããã€ã¿ã¹ã¯ã®äžéšãšããŠããªãã·ã§ã³ã§Apiaryã«ããã·ã¥ã§ããŸãã åœåã¯APIããã¥ã¡ã³ãã«å€æŽãå ãããããšããã«Apiaryã«çŽæ¥ããã·ã¥ããŸããããæ©èœã¹ã€ãããªã©ã䜿çšããŠãã倧ããªãªãªãŒã¹ã§äœæ¥ããŠãããšãã«åé¡ãçºçããããšãããããšãããã£ããããçŸåšã¯ã¢ããªã±ãŒã·ã§ã³ãšäžç·ã«ãããã€ããŠããŸãã
ãã¬ãŒã³URIã®æå®ãèš±å¯ããã ãã§ã¯ã©ãã§ããããã ã¬ã³ãã©ãŒã¯ãURIããªã³ã¯ã«ã¬ã³ããªã³ã°ãããããã®å 容ãããã¥ã¡ã³ãåºåã«å«ãããã決å®ã§ããŸãã ããã«ãããããŸããŸãªMarkdownãã¬ãŒããŒãåŠçããæéãçããŸãã
ãã¬ãŒã³URIã®æå®ãèš±å¯ããã ãã§ã¯ã©ãã§ããããã
ããããã¹ãã§ãã [label](URI)
ã¯ã転åã«äœ¿çšããé©åã«ã¬ã³ããªã³ã°ããå¿
èŠããããŸãã éãã¯ãtransclustionããŒã«ã®å Žåã¯:[label](URI)
ãã©ãããããŒã¯ããå¿
èŠãããããšã§ãã
ããã
ããã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ
ã¹ããŒããšäŸã¯ãAPIããã¥ã¡ã³ãã®æ¬äœããåé¢ããŠããµãŒããŒãã¯ã©ã€ã¢ã³ããæ€èšŒãåäœãã¹ãã«äœ¿çšã§ããããã«ããå¿
èŠããããšæããŸãã ãªã³ã¯ã¯å€§äžå€«ã§ãã
也æ¯ã
ã¿ãã¹
ã¿ãªãããããã«ã¡ã¯ãé ããªã£ãŠããã«æ¥ãŠãå€ããã®ãåéããŠæã£ãŠãã¿ãŸããã ãããé©åãªå Žæã§ãªãå Žåã¯ãã容赊ãã ããã ããããéåçã®ã¢ãã¯ãéçºããããã®èª¿æ»ãè¡ã£ãŠãããšããã®è°è«ãèŠã€ãããŸãããããã¯ããããŸã§ã«èŠã€ãããã®ã«æãè¿ããã®ã§ãã
ã¢ãã«ããšã«å¿çãåå²ããã®ã«èŠåŽããŠããŸã:(ãã¢ãã«ãå¥ã®ãã©ã«ããŒã«åç
§ããããšã¯ã§ããŸãããïŒ
ãã«ãŒããªã³ããã©ã«ããŒå
ã«ãã¹ãŠã®ãªã¯ãšã¹ããå
¥ããããšãã°ãå¥ã®ã¢ãã«ãã©ã«ããŒã«ããã¹ãŠã®ãšã³ãã£ãã£ã¢ãã«ïŒMSON / MD / JSON /é©åãªãã¡ã€ã«ïŒãå
¥ããŠãããŸããŸãªå¿çã«ç°¡åã«åå©çšã§ããããã«ããããšæããŸãã 誰ãããããæåãããŠããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯ãã®æ©èœã«èå³ããããçæ³çã«ã¯åŸã§ã§ã¯ãªãæ©ãè¿œå ããããšæã£ãŠããŸãã
ç§ãã¡ã®ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã¯ããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®æ¬æãApacheAvroã«ãã£ãŠçæããããã€ããªæ§é ã§ããAPIãææžåããããã®ãã®ã§ãã ãããã®ãªã¯ãšã¹ã/ã¬ã¹ãã³ã¹ã§ã¯ããã¹ããŒãããAvroã¹ããŒãå®çŸ©ãã¡ã€ã«ããŸãã¯ãã®Avroã¹ããŒãã説æããçæãããHTMLããã¥ã¡ã³ããžã®ãªã³ã¯ã«ããããšãã§ããŸãã 次ã®ããã«ãªããŸãã