Swagger â°çŽ20å
ð swagger editor
- âãŸãã¯ãããã¯ãªãã¯
ð Swaggerãšã¯
ð· ãªã³ã©ã€ã³ã®ã¢ããªãäœãã«ã¯ãããã¯ãšã³ãïŒWebãµãŒãäžã§åãããã°ã©ã ïŒãéçºããå¿
èŠããããŸã
ð· ããã¯ãšã³ãã®ã³ãŒããæžãåã«ãäœã®ããŒã¿ãã©ããªåœ¢ã§ãµãŒãã«éãã®ããã¢ã«ãŠã³ãããªãã£ããã©ã®ãããªãšã©ãŒãè¿ããïŒ404ïŒ401ïŒ)ãªã©ã決ããŠããå¿
èŠããããŸããããã Web API ãšèšããŸã
ð· Web API ïŒå³å¯ã«ã¯ RESTful APIïŒã決ããããã«ãSwaggerãšããããŒã«ã䟿å©ã§ããããã¯ãšã³ãã®ã³ãŒããæžããšãã«ã¯ Swagger ã§æ±ºããå
容ã確èªããªããæžããŠãããŸã
ð ãŸãã¯ãã¹ã®èª¬æãããŸã
1. ãã¹ãšã¯äœãïŒ
ð· ãã¹ã¯ãWeb ãµãŒããŒäžã§ç¹å®ã®ããŒã¿ãæ©èœã«ã¢ã¯ã»ã¹ããããã®ãäœæãã®ãããªãã®ã§ãã
ããšãã°ïŒ
- äœæïŒãã¹ïŒ: localhost:8080/accounts
- æå³: ãã¢ã«ãŠã³ãã®æ å ±ãããå Žæã
- ããããã©ãŠã¶ãã¢ããªãæå®ããŠããµãŒããŒã«ããã®äœæã«ããæ å ±ããã ããããšé Œã圢ã§ãã
2. æäœïŒHTTPã¡ãœããïŒãšçµã¿åããã
ð· ãã¹ã¯æäœã®çš®é¡ãšäžç·ã«äœ¿ããŸããæäœã®çš®é¡ã¯ãHTTPã¡ãœããããšåŒã°ãã以äžã®ãã®ã§ãïŒ
- GET: ããŒã¿ãååŸããïŒèŠãã ãïŒ
- POST: æ°ããããŒã¿ã远å ããïŒäœãïŒ
- PUT: ããŒã¿ãæŽæ°ããïŒæžãæããïŒ
- DELETE: ããŒã¿ãåé€ããïŒæ¶ãïŒ
3. å®éã®äŸã§èª¬æ
ð· ã¢ã«ãŠã³ãäžèЧãèŠã
- ãã¹ïŒlocalhost:8080/accounts
- ã¡ãœããïŒGET
â ãã¢ã«ãŠã³ããå šéšèŠããïŒããšé ŒããšãäžèЧãè¿ã£ãŠããŸã
ð· æ°ããã¢ã«ãŠã³ããäœã
- ãã¹ïŒlocalhost:8080/accounts
- ã¡ãœããïŒPOST
â ããã®ã¢ã«ãŠã³ãIDãšãã¹ã¯ãŒãã§æ°ããã¢ã«ãŠã³ããäœãããïŒããšé ŒããšããµãŒããŒãæ°ããã¢ã«ãŠã³ããäœããä¿åããŠãããŸã
ð· ç¹å®ã®ã¢ã«ãŠã³ãã®æ å ±ãèŠã
- ãã¹ïŒlocalhost:8080/accounts/abc
- ã¡ãœããïŒGET
â ãabc ãšããã¢ã«ãŠã³ãã®æ å ±ãèŠããïŒããšé Œããšããã®ã¢ã«ãŠã³ãã®æ å ±ã ãè¿ã£ãŠããŸã
ð· ç¹å®ã®ã¢ã«ãŠã³ãã®ãã¹ã¯ãŒããå€ãã
- ãã¹ïŒlocalhost:8080/accounts/abc/password
- ã¡ãœããïŒPUT
â ãabc ã®ã¢ã«ãŠã³ãã®ãã¹ã¯ãŒããããã«å€æŽããŠïŒããšé ŒããšããµãŒããŒããã®ãã¹ã¯ãŒããæŽæ°ããŸã
4. {account_id} ã®åœ¹å²
ð· localhost:8080/accounts/{account_id} ã® {account_id} éšåã¯ãç¹å®ã®ã¢ã«ãŠã³ããæå®ããããã®å Žæãã§ã
ð· å®éã«ã¯ããã® {account_id} ã®éšåãå
·äœçãªå€ïŒäŸ: abc ã xyzïŒã«çœ®ãæããããŸã
äŸ:
- localhost:8080/accounts/abc â ã¢ã«ãŠã³ã ID ã abc ã®æ å ±
- localhost:8080/accounts/xyz â ã¢ã«ãŠã³ã ID ã xyz ã®æ
å ±
ããã«ãã£ãŠããã©ã®ã¢ã«ãŠã³ããæäœãããããåããä»çµã¿ã§ã
5. ãŸãšãïŒãã®ä»çµã¿ã®ãã€ã³ã
ð· ãã¹: ãã©ã®æ
å ±ã«ã¢ã¯ã»ã¹ãããããæå®ããäœæã®ãããªãã®
ð· HTTPã¡ãœãã: ãã©ããªæäœããããããæå®ããåœä»€
ð· ãã©ã¡ãŒã¿ïŒäŸ: {account_id}ïŒ: ãå
·äœçã«ã©ã®ããŒã¿ãããç¹å®ãã倿°éšå
ð· ããããä»çµã¿ãçµã¿åãããŠããµãŒããŒã¯ããŒã¿ã®ç®¡çãæäœãå¹ççã«è¡ããŸã
ð æ¬¡ã«å®éã«æžããŠãããŸã
ð· 以äžã¯ãSwagger editor (å·Š) ãš Swagger UI (å³) ã§ã
ð· Try our new EditorãæŒããŠãå·Šã®ã³ãŒããå
šéšæ¶ããäžã®ç»åãã³ãŒããã³ããããªãããUIãšæ¯ã¹ãŠçè§£ããŠãããŸããã
ð· postãšgetã¯åãäœçœ®ã«ããããªã©ã€ã³ãã³ãã«æ°ãã€ããŠã³ããããŠãã£ãŠãã ãã
ð· ã³ãããããéã«ãšã©ãŒããšããªãã£ããåèµ·åããŸããã

ð· å³ã®Swagger UIãšç §ãããŠèŠãŠãããšãã

openapi: 3.0.3
info:
title: Lesson - OpenAPI 3.0
version: 1.0.0
description: |-
bookããŒã -åæ
1ãšã

tags:
- name: accounts
description: å
šã¢ã«ãŠã³ãã®æ
å ± # 詳ãã説æãæžããŸããã
ð·ã¿ã°ã®ååãaccountsãšããŸãð

components:
parameters: # {account_id}ã®ãããªãã®ããã¹ãã©ã¡ãŒã¿
account_id:
in: path
name: account_id
description: ååŸå¯Ÿè±¡ã®ãŠãŒã¶ãŒID
schema:
type: string
required: true # å¿
é ãšããæå³
ð·{account_id}ã¯åŸã§äœåãåºãŠããã®ã§ããããã¹ãã©ã¡ãŒã¿ãŒã ããŒãšããååŸå¯Ÿè±¡ã®ãŠãŒã¶ãŒidãªãã ããŒãšããå¿
é é
ç®ã ããšãããã«å
ã«æžããŠãããŸãã
ð·åŸã§ã- $ref: “#/components/parameters/account_id”ããšæžãããã{account_id}ã䜿ããŸãã

paths:
/accounts:
get:
tags: # accountsã¿ã°ã®äžã®ã話ð
- accounts
summary: ã¢ã«ãŠã³ãã®äžèЧãè¿ã # 説æãæžããŸãããã
description: ã¢ã«ãŠã³ãã®äžèЧããªã¹ããšããŠè¿ã # 詳ãã説æãæžããŸããã
responses:
'200': # æå
description: æå
content:
application/json: # JSON圢åŒã§è¿ã
schema:
type: array # é
å
items:
type: string # æåå
example: id1
ð·/accountsãšãããã¹ã«å¯ŸããŠGETããããšãæåã ã£ãå ŽåïŒ200)ãã¢ã«ãŠã³ãã®äžèЧããªã¹ããšããŠJSON圢åŒã§è¿ãããšãæžãããŠããŸãã
ð·schemaã«ã¯è¿ãããŒã¿ã®äŸãStringïŒæååïŒãšarrayïŒé
åïŒãçšããŠè¡šçŸãããŠããŸãã

post:
tags: # accountsã¿ã°ã®äžã®ã話ð
- accounts
summary: ã¢ã«ãŠã³ãã®æ°èŠäœæ # 説æãæžããŸãããã
description: account_idãšpasswordãèšå®ãæ°ããã¢ã«ãŠã³ããäœæãã # 詳ãã説æãæžããŸããã
requestBody:
required: true # repuestBodyã¯å¿
é é
ç®
content:
application/x-www-form-urlencoded: # ãã®åœ¢åŒã§account_idãšpasswordãç»é²ãããã
schema:
type: object # objectåããŒã¿ãšã¯keyãšvalueã§æ§æãããããŒã¿ã
properties:
account_id:
type: string
description: ã¢ã«ãŠã³ãå
password:
type: string
description: ãã¹ã¯ãŒã
required: # å¿
é é
ç®
- account_id
- password
responses:
'200': # æå
description: æå
'409': # ç«¶å
description: ãã§ã«account_idãååšãããšã
ð·/accountsãšãããã¹ã«å¯ŸããŠPOSTããããšãæåã ã£ãå ŽåïŒ200)ãx-www-form-urlencoded圢åŒã§ãaccount_idãšpasswordã keyãšvalueã§æ§æãããobjectåããŒã¿ã§ç»é²ãããããšãæžãããŠããŸãã
ð·objectåããŒã¿ãšããã®ã¯ä»¥äžã®ãããªåœ¢
äŸ :
{
"key" : "value",
"account_id" : "nitta217lab",
"password" : "13nitta217"
}

/accounts/{account_id}:
get:
tags: # accountsã¿ã°ã®äžã®ã話ð
- accounts
summary: ã¢ã«ãŠã³ãæ
å ±ãè¿ã(idãšpassword) # 説æãæžããŸãããã
description: æå®ãããã¢ã«ãŠã³ãã®æ
å ±ãè¿ã # 詳ãã説æãæžããŸããã
parameters:
- $ref: "#/components/parameters/account_id" # åãã«æžããŠããããã¹ãã©ã¡ãŒã¿ã®account_id
- in: query # passwordã¯queryParameter
name: password
schema:
type: string
description: ãã¹ã¯ãŒã # 詳ãã説æãæžããŸããã
required: true # ãã¹ã¯ãŒãã¯å¿
é é
ç®
responses:
'200':
description: æå
content:
application/json: # JSON圢åŒã§è¿ã
schema:
type: object # objectåããŒã¿
properties:
account_id:
type: string
description: ã¢ã«ãŠã³ãID
example: amika
password:
type: string
description: ãã¹ã¯ãŒã
example: abc123
'401':
description: ãã¹ã¯ãŒãééã
'404':
description: IDãååšããŸãã
ð·queryParameterã¯ã
ð· id,pass
ð·/accounts{account_id}ãšãããã¹ã«å¯ŸããŠGETããããšãæåã ã£ãå ŽåïŒ200)ãæå®ãããã¢ã«ãŠã³ãã®æ
å ±ïŒaccount_idãšpasswordïŒãJSON圢åŒã§è¿ãããšãæžãããŠããŸãã
ð·schemaã«ã¯è¿ãããŒã¿ã®äŸãStringïŒæååïŒãšarrayïŒé
åïŒãçšããŠè¡šçŸãããŠããŸãã

/accounts/{account_id}/password:
put:
tags:
- accounts
summary: ãã¹ã¯ãŒãã倿Žãã # 説æãæžããŸãããã
description: æå®ãããIDã®ã¢ã«ãŠã³ãã倿Žãã # 詳ãã説æãæžããŸããã
parameters:
- $ref: "#/components/parameters/account_id"
requestBody:
required: true
content:
application/x-www-form-urlencoded: # ãã®åœ¢åŒã®ããŒã¿ã䜿ã£ãŠãã¹ã¯ãŒãã倿Ž
schema:
type: object
properties:
password:
type: string
description: 倿Žåã®ãã¹ã¯ãŒã
new_password:
type: string
description: æ°ãããã¹ã¯ãŒã
required:
- password
- new_password
responses:
'401':
description: ãã¹ã¯ãŒãééã
ð· Fileã¿ãã®Save as YAML ãæŒããšå·Šã®ã³ãŒããyaml圢åŒã§ä¿åã§ããããããã®ã³ãŒããããŒã ã§å
±æã§ããŸãã
ð· ä»ã®ããŒã ã®ã³ãŒããéããšãã¯ãFileã¿ãã®Import fileãæŒããä¿åãããã¡ã€ã«ãéããšé²èЧãç·šéãã§ããã
以äžã§swaggerã¯çµããð
2/5é²ãã ãð äœåãããã£ãããªïŒ äŒæ©ããŠãâ
次ã¯Intellij ideaã§ããã¯ãšã³ãã®ã³ãŒããæžããŠãããïŒ