OpenAPI-firstãšcode-firstã®APIéçºïŒäž»èŠãªãã¬ãŒããªã
OpenAPI-firstãšcode-firstã®APIéçºãæ¯èŒïŒã¹ããŒããäžè²«æ§ãã¯ã©ã€ã¢ã³ãçæãæ€èšŒãšã©ãŒããŠãŒã¶ãŒåãã«ããããããããæ¹æ³ã

ãã®è°è«ãæ¬åœã«è§£ãããšããŠããåé¡
OpenAPI-firstãšcode-firstã®è°è«ã¯åãªã奜ã¿ã®åé¡ã§ã¯ãããŸãããAPIããããããšèšã£ãŠããããšãšå®éã«ãã£ãŠããããšã®éã«çãããã£ãããšãããºã¬ãé²ãããã®è©±ã§ãã
OpenAPI-firstã¯ããŸãAPIå¥çŽïŒãšã³ããã€ã³ããå ¥åãåºåããšã©ãŒïŒãOpenAPI仿§ã§æžããããã«åãããŠãµãŒããšã¯ã©ã€ã¢ã³ããæ§ç¯ããããšãæå³ããŸããcode-firstã¯å ã«ã³ãŒãã§APIãäœããå®è£ ããOpenAPI仿§ãããã¥ã¡ã³ããçæãŸãã¯æžãåºããŸãã
ããŒã ããã®ç¹ã§æããã®ã¯ãåé¡ãåŸã§çŸããããã§ããéåžžã¯ã"å°ããª"ããã¯ãšã³ãã®å€æŽã®åŸã«ã¯ã©ã€ã¢ã³ãã¢ããªãå£ãããããã¥ã¡ã³ãããµãŒãã®å®éã®æ¯ãèãã説æããŠããªãããšã³ããã€ã³ãéã§ããªããŒã·ã§ã³ã«ãŒã«ãäžèŽããªãããããŸããª400ãšã©ãŒã§äººã ãæšæž¬ã匷ããããããããŠãµããŒããã±ããããæšæ¥ã¯åããŠããããšããå§ãŸãã«ãªãããšãã圢ã§çŸããŸãã
ç°¡åãªäŸïŒã¢ãã€ã«ã¢ããªãphoneNumberãéã£ãŠããã®ã«ããã¯ãšã³ãããã£ãŒã«ãåãphoneã«å€æŽãããšããŸãããµãŒãã¯æ±çšã®400ãè¿ããŸããããã¥ã¡ã³ãã¯ãŸã phoneNumberã瀺ããŠããŸãããŠãŒã¶ãŒã¯ãBad Requestããšã ãèŠãŠãéçºè
ã¯ãã°ãæãäžããããšã«ãªããŸãã
ã§ã¯æ¬åœã®åãã¯ããã§ãïŒAPIãå€åããŠããå¥çŽãå®è¡æã®åäœãã¯ã©ã€ã¢ã³ãã®æåŸ ãã©ããã£ãŠæããŠããããã§ãã
ãã®æ¯èŒã¯ãæ¥ã ã®äœæ¥ã«åœ±é¿ãã4ã€ã®ææã«çŠç¹ãåœãŠãŸãïŒã¹ããŒãïŒä»ããåºè·ããã®ã«æå©ãªç¹ãšé·æçã«éããä¿ã€ç¹ïŒãäžè²«æ§ïŒå¥çŽãããã¥ã¡ã³ããå®è¡æã®æ¯ãèãã®äžèŽïŒãã¯ã©ã€ã¢ã³ãçæïŒä»æ§ãæéãšãã¹ãç¯çŽããå Žé¢ïŒããããŠããªããŒã·ã§ã³ãšã©ãŒïŒ"ç¡å¹ãªå ¥å"ã人ã察åŠã§ããã¡ãã»ãŒãžã«å€ããæ¹æ³ïŒã
2ã€ã®ã¯ãŒã¯ãããŒïŒOpenAPI-firstãšcode-firstã®å žåçãªæµã
OpenAPI-firstã¯å¥çŽããå§ãŸããŸãã誰ããšã³ããã€ã³ãã³ãŒããæžãå§ããåã«ãããŒã ã¯ãã¹ããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®åœ¢ãã¹ããŒã¿ã¹ã³ãŒãããšã©ãŒãã©ãŒãããã«ã€ããŠåæããŸããèãæ¹ã¯åçŽã§ãïŒAPIãã©ãããã¹ãããæ±ºããŠãããããã«åãããã«å®è£ ããã
å žåçãªOpenAPI-firstã®æµãïŒ
- OpenAPI仿§ã®èæ¡ãäœãïŒãšã³ããã€ã³ããã¹ããŒããèªèšŒããšã©ãŒïŒ
- ããã¯ãšã³ããããã³ããšã³ããQAãšã¬ãã¥ãŒãã
- ã¹ã¿ããçæãããã仿§ãçå®ã®ãœãŒã¹ãšããŠå ±æãã
- ãµãŒãã仿§ã«åãããŠå®è£ ãã
- ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãå¥çŽã«å¯ŸããŠæ€èšŒããïŒãã¹ããããã«ãŠã§ã¢ïŒ
code-firstã¯é åºãéã«ããŸãããšã³ããã€ã³ããã³ãŒãã§äœããåŸã§ããŒã«ãOpenAPIããã¥ã¡ã³ããåºããããã«æ³šéãã³ã¡ã³ããä»ããŸããAPIããŸã æµåçãªæ¢çŽ¢ãã§ãŒãºã®ãšãã¯ãå¥ã®ä»æ§ãå ã«æŽæ°ããªããŠæžãåã ãæ©ãæããããããšããããŸãã
å žåçãªcode-firstã®æµãïŒ
- ã³ãŒãã§ãšã³ããã€ã³ããšã¢ãã«ãå®è£ ãã
- ã¹ããŒãããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ã®æ³šéã远å ãã
- ã³ãŒãããŒã¹ããOpenAPI仿§ãçæãã
- åºåã調æŽããïŒãããŠã泚éã調æŽïŒ
- çæããã仿§ãããã¥ã¡ã³ããã¯ã©ã€ã¢ã³ãçæã«äœ¿ã
ã©ãã§ãºã¬ãçãããã¯ã¯ãŒã¯ãããŒæ¬¡ç¬¬ã§ããOpenAPI-firstã§ã¯ã仿§ãäžåºŠã®èšèšããã¥ã¡ã³ããšããŠæ±ããããã®åŸæŽæ°ãããªããªããšããªãããèµ·ããŸããcode-firstã§ã¯ãå®è£ ãå€ãã£ãŠã泚éãæŽæ°ãããªããšãçæããã仿§ã¯èŠãç®äžæ£ãããå®éã®æ¯ãèãïŒã¹ããŒã¿ã¹ã³ãŒããå¿ é ãã£ãŒã«ãããšããžã±ãŒã¹ïŒãéãã«å€ãã£ãŠããããšããããŸãã
ã·ã³ãã«ãªã«ãŒã«ïŒå¥çŽãã¡ãŒã¹ãã¯ä»æ§ãç¡èŠããããšããªããããã³ãŒããã¡ãŒã¹ãã¯ããã¥ã¡ã³ããåŸåãã«ããããšããªããããŸãã
ã¹ããŒãïŒä»ã¯éãæããããåŸã§ãéããä¿ãŠãã®ã¯ïŒ
ã¹ããŒãã¯äžã€ã®ãã®ã§ã¯ãããŸããããæ¬¡ã®å€æŽãã©ãã ãæ©ãåºãããããšã6ãæåŸãã©ãã ãéãåºãç¶ããããããã§ããäºã€ã®ã¢ãããŒãã¯ã©ã¡ããéãæããããå ¥ãæ¿ããããšããããŸãã
åææ®µéã§ã¯code-firstã®æ¹ãéãæããããŸãããã£ãŒã«ãã远å ããŠã¢ããªãèµ·åããã°ããåããŸããAPIããŸã åãæšçã®ãšãã¯ãã®ãã£ãŒãããã¯ã«ãŒãã«åããã®ã¯ãããŸãããã³ã¹ãã¯ä»ã®äººã ïŒã¢ãã€ã«ãWebã瀟å ããŒã«ãããŒãããŒãQAïŒãAPIã«äŸåãå§ãããšãã«çŸããŸãã
OpenAPI-firstã¯åæ¥ã¯é ãæããããšããããŸãããšã³ããã€ã³ããååšããåã«å¥çŽãæžãå¿ èŠãããããã§ãããã ãå©ç¹ã¯ææ»ããå°ãªãããšã§ãããã£ãŒã«ãåãå€ãããšãããã®å€æŽã¯ã¯ã©ã€ã¢ã³ããå£ãåã«å¯èŠåããã¬ãã¥ãŒã§ããŸãã
é·æçãªã¹ããŒãã¯äž»ã«ææ»ããé¿ããããšã«é¢ä¿ããŸãïŒããŒã éã®èª€è§£ãå°ãªãããšãæåã®äžäžèŽã«ããQAãµã€ã¯ã«ãæžãããšãå¥çŽãæç¢ºãªåºçºç¹ã«ãªãããšã§ãªã³ããŒãã£ã³ã°ãéããªãããšã倿Žãæç€ºçã«ãªãããšã§æ¿èªãã¯ãªãŒã³ã«ãªãããšã
ããŒã ãæãé ãããã®ã¯ã³ãŒãã®å ¥åéã§ã¯ãããŸãããåäœæ¥ã§ãïŒã¯ã©ã€ã¢ã³ãã®åæ§ç¯ããã¹ãã®æžãçŽããããã¥ã¡ã³ãã®æŽæ°ããããŠäžæçãªæ¯ãèãã«ãããµããŒã察å¿ã§ãã
å éšããŒã«ãšã¢ãã€ã«ã¢ããªã䞊è¡ããŠäœã£ãŠãããªããå¥çŽãã¡ãŒã¹ãã¯äž¡ããŒã ãåæã«åãããšãå¯èœã«ããŸãããŸããèŠä»¶ãå€ãã£ããšãã«ã³ãŒããåçæãããããªãã©ãããã©ãŒã ïŒäŸïŒAppMasterïŒã䜿ã£ãŠãããªããåãååãå€ã決å®ãåŒããããªãæå©ãã«ãªããŸãã
äžè²«æ§ïŒå¥çŽãããã¥ã¡ã³ããæ¯ãèããæãã
ã»ãšãã©ã®APIã®çã¿ã¯æ©èœäžè¶³ã§ã¯ãªãäžäžèŽã«ãããŸããããã¥ã¡ã³ãã¯ããããšã瀺ããŠããŠããµãŒãã¯å¥ã®ããšãããŠããŠãã¯ã©ã€ã¢ã³ããèŠã€ãã«ãã圢ã§å£ããŸãã
éèŠãªã®ã¯ãçã®åç §ïŒsource of truthïŒãã§ããå¥çŽãã¡ãŒã¹ãã§ã¯ã仿§ãåç §ã§ãããä»ã¯ããã«åŸãã¹ãã§ããã³ãŒããã¡ãŒã¹ãã§ã¯ã皌åäžã®ãµãŒããåç §ã§ããã仿§ãããã¥ã¡ã³ãã¯åŸè¿œãã«ãªãããšãå€ãã§ãã
ååä»ããåãå¿ é ãã£ãŒã«ãã§ããªããã¯æåã«èŠããŸãããã£ãŒã«ããã³ãŒãå ã§ãªããŒã ãããŠä»æ§ãæŽæ°ãããªããããã¯ã©ã€ã¢ã³ãã"true"ãéãããšã§ããŒã«ãæååã«ãªãããªãã·ã§ãã«ã ã£ããã£ãŒã«ããå¿ é ã«ãªããå€ãã¯ã©ã€ã¢ã³ãã¯å€ã圢ãéãç¶ãããå倿Žã¯å°ããããã«èŠããŸããããŸãšãããšãµããŒãè² è·ãçã¿ãŸãã
å®è·µçãªäžè²«æ§ç¶ææ³ã¯ã絶察ã«ä¹é¢ãããŠã¯ãããªããã®ã決ãããããã¯ãŒã¯ãããŒã§åŒ·å¶ããããšã§ãïŒ
- ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã«å¯ŸããŠäžã€ã®æ£æºã¹ããŒãã䜿ãïŒå¿ é ãã£ãŒã«ããšãã©ãŒããããå«ãïŒã
- ç Žå£ç倿Žã¯æå³çã«ããŒãžã§ã³ç®¡çããããã£ãŒã«ãã®æå³ãé»ã£ãŠå€ããªãã
- åœåã«ãŒã«ïŒsnake_caseãcamelCaseãïŒã«åæããŠå šäœã«é©çšããã
- äŸãåãªãããã¥ã¡ã³ãã§ã¯ãªãå®è¡å¯èœãªãã¹ãã±ãŒã¹ãšããŠæ±ãã
- CIã§å¥çŽãã§ãã¯ã远å ããŠãäžäžèŽãæ©ã倱æããããã«ããã
äŸã¯ç¹ã«æ³šæãå¿ èŠã§ãã人ã ãã³ããŒããã®ã¯äŸãªã®ã§ãäŸã«å¿ é ãã£ãŒã«ããæ¬ ããŠããã°å®éã«æ¬ ãããªã¯ãšã¹ããæ¥ãŸãã
ã¯ã©ã€ã¢ã³ãçæïŒOpenAPIãæãå¹ãå Žé¢
çæã¯ã©ã€ã¢ã³ããæãéèŠã«ãªãã®ã¯ãè€æ°ã®ããŒã ïŒãããã¯ã¢ããªïŒãåãAPIã䜿ããšãã§ããããã§ã¯è°è«ãè¶£å³ã®åé¡ãè¶ ããŠæéãç¯çŽããŸãã
äœãçæã§ãããïŒãããŠãªã圹ç«ã€ãïŒ
ãã£ããããOpenAPIå¥çŽããã¯ããã¥ã¡ã³ã以äžã®ãã®ãçæã§ããŸããäžè¬çãªåºåã«ã¯ãæ©æã«ãã¹ãæ€åºããåä»ãã¢ãã«ãWebãã¢ãã€ã«åãã®ã¯ã©ã€ã¢ã³ãSDKïŒã¡ãœãããåãèªèšŒããã¯ïŒãå®è£ ãåãããããã®ãµãŒãã¹ã¿ããQAããµããŒãåãã®ãã¹ããã£ã¯ã¹ãã£ãšãµã³ãã«ãã€ããŒããããã¯ãšã³ãã宿ããåã«ããã³ããšã³ãäœæ¥ãå§ããããã¢ãã¯ãµãŒããªã©ããããŸãã
ããã¯ãWebã¢ããªãã¢ãã€ã«ã¢ããªãå éšããŒã«ãåããšã³ããã€ã³ããåŒã¶ãããªç¶æ³ã§æãæ©ã广ãçºæ®ããŸããå°ããªå¥çŽå€æŽã¯æäœæ¥ã§åå®è£ ãã代ããã«ããã¡ãã¡ã§åçæã§ããŸãã
çæã¯ã©ã€ã¢ã³ãã¯ãç¹æ®ãªèªèšŒãããŒããªãã©ã€ããªãã©ã€ã³ãã£ãã·ã¥ããã¡ã€ã«ã¢ããããŒããªã©ã®å€§ããªã«ã¹ã¿ãã€ãºãå¿ èŠãªå Žåããããã¯ãžã§ãã¬ãŒã¿ãŒãããŒã ã®å¥œãŸãªãã³ãŒããåºãå Žåã«äžæºã®çš®ã«ãªããŸããäžè¬çãªåŠ¥åçã¯ãã³ã¢ã®åãšäœã¬ãã«ã¯ã©ã€ã¢ã³ããçæãããããèãææžãã©ãããŒã§å ãããšã§ãã
çæã¯ã©ã€ã¢ã³ããéãã«å£ããã®ãé²ãæ¹æ³
ã¢ãã€ã«ãããã³ããšã³ãã¯äºæããªã倿Žãå«ããŸãã"æšæ¥ã¯ã³ã³ãã€ã«ã§ãã"çãªå€±æãé¿ããããã«ïŒ
- å¥çŽãããŒãžã§ã³åãããã¢ãŒãã£ãã¡ã¯ããšããŠæ±ãã倿Žãã³ãŒããšåæ§ã«ã¬ãã¥ãŒããã
- ç Žå£ç倿ŽïŒãã£ãŒã«ãã®åé€ãåã®å€æŽïŒã§å€±æããCIãã§ãã¯ã远å ããã
- å ç®çãªå€æŽïŒæ°ãããªãã·ã§ã³ãã£ãŒã«ãïŒãåªå ããåé€åã«éæšå¥šã«ããã
- ãšã©ãŒå¿çãäžè²«ãããŠãã¯ã©ã€ã¢ã³ããäºæž¬å¯èœã«ãã³ãã«ã§ããããã«ããã
éçšããŒã ãWeb管çç»é¢ã䜿ããçŸå Žã¹ã¿ããããã€ãã£ãã¢ããªã䜿ãå ŽåãåãOpenAPIãã¡ã€ã«ããKotlin/Swiftã¢ãã«ãçæããã°ãã£ãŒã«ãåãåæå€ã®äžäžèŽãé²ããŸãã
ããªããŒã·ã§ã³ãšã©ãŒïŒ"400"ããŠãŒã¶ãŒãçè§£ã§ãããã®ã«ãã
ã»ãšãã©ã®"400 Bad Request"ã¬ã¹ãã³ã¹ã¯æ¬åœã«åé¡ã®ãããã®ã§ã¯ãªããéåžžã¯ããªããŒã·ã§ã³å€±æã§ãïŒå¿ é ãã£ãŒã«ãããªããæ°å€ãæååãšããŠéããããæ¥ä»ã®ãã©ãŒããããééã£ãŠããããªã©ãåé¡ã¯çã®ããªããŒã·ã§ã³åºåãéçºè åãã®ã¡ã¢ã®ããã«èªããŠããŸãã人ãçŽãã圢ã«ãªã£ãŠããªãããšã§ãã
ãµããŒããã±ãããæãçã¿ããã倱æã¯ãå¿ é ãã£ãŒã«ãã®æ¬ èœãåã®èª€ãããã©ãŒãããäžæ£ïŒdate, UUID, phone, currencyïŒãç¯å²å€ã®å€ãèš±å¯ãããŠããªãå€ïŒåãå ¥ããªã¹ãã«ãªãã¹ããŒã¿ã¹ïŒã§ãã
äž¡æ¹ã®ã¯ãŒã¯ãããŒã¯åãçµæã«ãªãããšããããŸãïŒAPIã¯äœãæªãããç¥ã£ãŠããã®ã«ãã¯ã©ã€ã¢ã³ãã«ã¯"invalid payload"ã®ãããªãããŸããªã¡ãã»ãŒãžããæž¡ããªãããããçŽãã®ã¯ã¯ãŒã¯ãããŒãšãããããæç¢ºãªãšã©ãŒåœ¢ç¶ãšäžè²«ãããããã³ã°ã«ãŒã«ãæ¡çšããããšã§ãã
ã·ã³ãã«ãªãã¿ãŒã³ïŒã¬ã¹ãã³ã¹ãäžè²«ããããã¹ãŠã®ãšã©ãŒãå®è¡å¯èœã«ãããè¿ãã¹ãã¯ïŒ1ïŒã©ã®ãã£ãŒã«ããééã£ãŠããããïŒ2ïŒãªãééã£ãŠããããïŒ3ïŒã©ãçŽãã°ããããã®æ å ±ã§ãã
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Please fix the highlighted fields.",
"details": [
{
"field": "email",
"rule": "format",
"message": "Enter a valid email address."
},
{
"field": "age",
"rule": "min",
"message": "Age must be 18 or older."
}
]
}
}
ããã¯UIãã©ãŒã ã«ããããã«ãããã³ã°ã§ããŸãïŒãã£ãŒã«ãããã€ã©ã€ããã飿¥ããŠã¡ãã»ãŒãžã衚瀺ããèŠéãã人åãã«çããããã¡ãã»ãŒãžã眮ããéµã¯å éšåãã®è¡šçŸïŒ"failed schema validation" ã®ãããªïŒãæŒãããããŠãŒã¶ãŒãå®éã«å€æŽã§ããèšèã䜿ãããšã§ãã
ã©ãã§æ€èšŒãã¹ãããéè€ã«ãŒã«ãé¿ããæ¹æ³
åã¬ã€ã€ãŒã«æç¢ºãªåœ¹å²ããããšæ€èšŒã¯ããŸããããŸãããã¹ãŠã®å±€ããã¹ãŠã®ã«ãŒã«ã匷å¶ããããšãããšãäºéäœæ¥ãæ··ä¹±ãããšã©ãŒããããŠWebã»ã¢ãã€ã«ã»ããã¯ãšã³ãéã§ã®ã«ãŒã«ã®ããªãããçããŸãã
å®çšçãªåæ ã¯æ¬¡ã®ããã«ãªããŸãïŒ
- ãšããžïŒAPIã²ãŒããŠã§ã€ããªã¯ãšã¹ããã³ãã©ïŒ: 圢ç¶ãšåãæ€èšŒããïŒå¿ é ãã£ãŒã«ãã誀ã£ããã©ãŒããããåæå€ïŒãããã«OpenAPIã¹ããŒããããåããŸãã
- ãµãŒãã¹å±€ïŒããžãã¹ããžãã¯ïŒ: å®éã®ã«ãŒã«ãæ€èšŒããïŒæš©éãç¶æ é·ç§»ã"çµäºæ¥ã¯éå§æ¥ããåŸã§ããå¿ èŠããã"ã"å²åŒã¯ã¢ã¯ãã£ããªé¡§å®¢ã®ã¿" ãªã©ïŒã
- ããŒã¿ããŒã¹: 絶察ã«ç ŽãããŠã¯ãªããªããã®ã匷å¶ããïŒäžæå¶çŽãå€éšããŒãnot-nullïŒãããŒã¿ããŒã¹ãšã©ãŒã¯å®å šç¶²ãšããŠæ±ããŸãã
Webãšã¢ãã€ã«ã§åãã«ãŒã«ãä¿ã€ã«ã¯ãäžã€ã®å¥çŽãšäžã€ã®ãšã©ãŒåœ¢åŒã䜿ã£ãŠãã ãããã¯ã©ã€ã¢ã³ããäºåãã§ãã¯ïŒå¿ é ãã£ãŒã«ãã®æç¡ãªã©ïŒãããŠããæçµå€å®ã¯APIã«ä»»ããã¹ãã§ããããããã°ã«ãŒã«å€æŽã§ã¢ãã€ã«ã®ã¢ããããŒããå¿ é ã«ãªãããšãé¿ããããŸãã
ç°¡åãªäŸïŒAPIãE.164ãã©ãŒãããã®phoneãèŠæ±ãããªãããšããžã§äžæ£ãªãã©ãŒããããäžè²«ããŠåŒŸããŸãããã ããé»è©±çªå·ã¯1æ¥1åãã倿Žã§ããªããã¯ãŠãŒã¶ãŒå±¥æŽã«äŸåãããããµãŒãã¹å±€ã§æ±ãã¹ãã§ãã
ãã°ã«æ®ãã¹ãããšãšãŠãŒã¶ãŒã«èŠããã¹ãããš
éçºè åãã«ã¯ãããã°ã«ååãªæ å ±ããã°ã«æ®ããŠãã ããïŒãªã¯ãšã¹ãIDããŠãŒã¶ãŒIDïŒå¯èœãªãïŒããšã³ããã€ã³ããæ€èšŒã«ãŒã«ã³ãŒãããã£ãŒã«ãåãçã®äŸå€ããŠãŒã¶ãŒåãã«ã¯çãå®è¡å¯èœã«ä¿ã¡ãŸãïŒã©ã®ãã£ãŒã«ãã倱æããããäœãçŽãã°ããããå®å šãªå Žåã¯äŸã瀺ããå éšã®ããŒãã«åãã¹ã¿ãã¯ãã¬ãŒã¹ã"ãŠãŒã¶ãŒãããŒã«Xã«ããªã" ãšãã£ãããªã·ãŒè©³çްã¯å ¬éããªãã§ãã ããã
ã¹ããããã€ã¹ãããïŒäžã€ã®ã¢ãããŒããéžãã§å±éããæ¹æ³
ããŒã ã§ãŸã è°è«ãç¶ããªããã·ã¹ãã å šäœãäžåºŠã«æ±ºããããšããªãã§ãã ãããå°ããªäœãªã¹ã¯ã®ã¹ã©ã€ã¹ãéžã³ãå®éã«ãã£ãŠã¿ãŸãããã1åã®ãã€ãããããåŠã¶ããšã¯ãäœé±éãã®è°è«ããå€ãã§ãã
çãç¯å²ããå§ããŸãïŒ1ã€ã®ãªãœãŒã¹ãšå®éã«äœ¿ãããŠãã1ã3åã®ãšã³ããã€ã³ãïŒäŸïŒ"ãã±ããäœæ"ã"ãã±ããäžèЧ"ã"ã¹ããŒã¿ã¹æŽæ°"ïŒãæ¬çªã«è¿ãã»ã©å®éã®çã¿ãèŠããŸããã倿޿¹éãå€ããããçšåºŠã«å°ããããŸãã
å®çšçãªå±éèšç»
-
ãã€ããããéžã³ã"å®äº"ã®å®çŸ©ã決ããïŒãšã³ããã€ã³ããèªèšŒãäž»èŠãªæåã»å€±æã±ãŒã¹ïŒã
-
OpenAPI-firstã«ãããªãããµãŒãã³ãŒããæžãåã«ã¹ããŒããäŸãæšæºãšã©ãŒåœ¢ç¶ãæžãã仿§ãå ±æåæãšããŸãã
-
code-firstã«ãããªãããã³ãã©ãäœã£ãŠä»æ§ããšã¯ã¹ããŒãããååã説æãäŸããšã©ãŒå¿çãèªã¿ãããå¥çŽã«ãªããŸã§æŽããŸãã
-
å¥çŽãã§ãã¯ã远å ããŠå€æŽãæå³çã«ããïŒå¥çŽãäºææ§ãå£ãå·®åããããšãã«ãã倱æãããããããã¯çæã¯ã©ã€ã¢ã³ããå¥çŽããå€ããŠããªããã確èªããã
-
å®éã®ã¯ã©ã€ã¢ã³ãïŒWeb UIãã¢ãã€ã«ã¢ããªïŒã«ããŒã«ã¢ãŠãããŠãæ©æŠç¹ãéããŠã«ãŒã«ãæŽæ°ããã
no-codeãã©ãããã©ãŒã ïŒäŸïŒAppMasterïŒã䜿ãå Žåããã€ãããã¯ããã«å°ããã§ããŸãïŒããŒã¿ãã¢ããªã³ã°ãããšã³ããã€ã³ããå®çŸ©ããåãå¥çŽã§Web管çç»é¢ãšã¢ãã€ã«ãã¥ãŒã®äž¡æ¹ãé§åã§ããŸããããŒã«èªäœãã倧äºãªã®ã¯ç¿æ £ã§ãïŒäžã€ã®çã®ãœãŒã¹ã倿޿ã«ãã¹ããããå®éã®ãã€ããŒãã«åãäŸãçšæããããšã
ã¹ããŒããŠã³ãšãµããŒããã±ãããçãäžè¬çãªãã¹
ã»ãšãã©ã®ããŒã ã¯"åã"ãééãããã倱æããã®ã§ã¯ãããŸãããå¥çŽãšã©ã³ã¿ã€ã ãå¥äžçãšããŠæ±ããããããäœé±éããããŠããåãããããšãããã倱æããŸãã
å€å žçãªèœãšã穎ã¯ãOpenAPIãã¡ã€ã«ã"ããããªããã¥ã¡ã³ã"ãšããŠæžããŠãããã匷å¶ããªãããšã§ãã仿§ãããªããããã¯ã©ã€ã¢ã³ãã誀ã£ãçå®ããçæãããQAãé ããŠäžäžèŽãçºèŠããŸããããå¥çŽãå ¬éãããªããããããã¹ãå¯èœã«ããŠãã ããïŒãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã仿§ã«å¯ŸããŠæ€èšŒããããå®è£ ãåããããµãŒãã¹ã¿ããçæãããªã©ã
ããäžã€ã®ãµããŒããã±ããå·¥å Žã¯ãããŒãžã§ã³ã«ãŒã«ã®ãªãã¯ã©ã€ã¢ã³ãçæã§ããã¢ãã€ã«ãããŒãããŒã®ã¯ã©ã€ã¢ã³ããèªåã§ææ°çæSDKã«æŽæ°ããããšãå°ããªå€æŽïŒãã£ãŒã«ãã®ãªããŒã ãªã©ïŒãéããªå£ãã«ã€ãªãããŸããçæã¯ã©ã€ã¢ã³ãã®ããŒãžã§ã³ãåºå®ããæç¢ºãªå€æŽããªã·ãŒãå ¬éããç Žå£ç倿Žãæå³çãªãªãªãŒã¹ãšããŠæ±ã£ãŠãã ããã
ãšã©ãŒãã³ããªã³ã°ã¯ãå°ããªäžäžèŽã倧ããªã³ã¹ããçãå Žæã§ãããšã³ããã€ã³ãããšã«ç°ãªã400圢ç¶ãè¿ããããšãããã³ããšã³ãã¯åå¥ã®ããŒãµãŒãäœããæ±çšã®"äœããééã£ãŠãã"ã¡ãã»ãŒãžã«é Œãããã«ãªããŸãããšã©ãŒãæšæºåããŠã¯ã©ã€ã¢ã³ãã確å®ã«åœ¹ç«ã€æèšã衚瀺ã§ããããã«ããŸãããã
ã»ãšãã©ã®ã¹ããŒããŠã³ãé²ãç°¡åãªãã§ãã¯ïŒ
- çã®ãœãŒã¹ãäžã€ã«ä¿ã€ïŒä»æ§ããã³ãŒããçæããããã³ãŒããã仿§ãçæãããã«ããåžžã«äžèŽãæ€èšŒããã
- çæã¯ã©ã€ã¢ã³ãã¯APIããŒãžã§ã³ã«åºå®ããäœãç Žå£ç倿Žã«åœãããææžåããã
- åããšã©ãŒåœ¢åŒãå šäœã§äœ¿ããå®å®ãããšã©ãŒã³ãŒããå«ããã
- åä»ãªãã£ãŒã«ãïŒæ¥ä»ãã©ãŒããããåæããã¹ããªããžã§ã¯ãïŒã®äŸãåå®çŸ©ã ãã§ãªã瀺ãã
- å¢çã§æ€èšŒããïŒã²ãŒããŠã§ã€ãã³ã³ãããŒã©ïŒããšã§ãããžãã¹ããžãã¯ã¯ã¯ãªãŒã³ãªå ¥åãåæã«ã§ããã
決å®åã®ç°¡åãã§ãã¯ãªã¹ã
æ¹åæ§ãéžã¶åã«ãããŒã ã®çã®æ©æŠç¹ãé²åããããã€ãã®å°ããªãã§ãã¯ãè¡ã£ãŠãã ããã
ã·ã³ãã«ãªæºåãã§ãã¯ãªã¹ã
代衚çãªãšã³ããã€ã³ãã1ã€éžã³ïŒãªã¯ãšã¹ãããã£ãæ€èšŒã«ãŒã«ãããã€ãã®ãšã©ãŒã±ãŒã¹ïŒã次ã®è³ªåã«"ã¯ã"ãšçããããã確èªããŸãïŒ
- å¥çŽã®ãªãŒããŒãæç¢ºã«æ±ºãŸã£ãŠããã倿Žåã«ã¬ãã¥ãŒæé ãããã
- ãšã©ãŒå¿çã¯ãšã³ããã€ã³ãéã§åãèŠãç®ãšæåãããïŒåãJSON圢ç¶ãäºæž¬å¯èœãªãšã©ãŒã³ãŒããéæè¡ãŠãŒã¶ãŒã察å¿ã§ããã¡ãã»ãŒãžã
- å¥çŽããã¯ã©ã€ã¢ã³ããçæããŠã1ã€ã®å®éã®UIç»é¢ã§æäœæ¥ã®åç·šéããã£ãŒã«ãåã®æšæž¬ãªãã«äœ¿ããã
- ç Žå£ç倿Žã¯ãããã€åã«æãŸããããïŒCIã§ã®å¥çŽå·®åãã§ãã¯ããŸãã¯ã¬ã¹ãã³ã¹ãã¹ããŒããšåããªããšå€±æãããã¹ãïŒã
ãããªãŒããŒã·ãããšã¬ãã¥ãŒã§ã€ãŸãããªãã"ã»ãŒæ£ãã"APIãåºè·ãç¶ããŠããªãããé²ã¿ãŸãããšã©ãŒåœ¢ç¶ã§ã€ãŸãããªãããµããŒããã±ãããç©ã¿äžããããŠãŒã¶ãŒã¯"400 Bad Request"ããèŠããã«äœãçŽãã°ãããåãããªããªããŸãã
å®è·µçãªãã¹ãïŒé¡§å®¢äœæã®ãã©ãŒã ç»é¢ãã²ãšã€åãããããš3ã€ã®äžæ£å ¥åãéã£ãŠã¿ãŠãã ããããããã®æ€èšŒãšã©ãŒãç¹å¥æ±ãã®ã³ãŒããªãã«ãã£ãŒã«ãã¬ãã«ã®æç¢ºãªã¡ãã»ãŒãžã«å€ãããããªããã¹ã±ãŒã©ãã«ãªã¢ãããŒãã«è¿ãã§ãã
äŸã·ããªãªïŒå éšããŒã«ãšã¢ãã€ã«ã¢ããªãåãAPIã䜿ãå Žå
å°ããªããŒã ããŸãéçšåãã®å éšç®¡çããŒã«ãäœããæ°ãæåŸã«çŸå Žã¹ã¿ããåãã®ã¢ãã€ã«ã¢ããªãäœããšããŸããäž¡æ¹ãåãAPIã«ã¢ã¯ã»ã¹ããŸãïŒäœæ¥æç€ºãäœããã¹ããŒã¿ã¹ãæŽæ°ãããåçãæ·»ä»ãããªã©ã
code-firstã§ã¯ã管çããŒã«ã¯æ©ãåãããšãå€ãã§ããWeb UIãšããã¯ãšã³ããäžç·ã«å€ããããã§ããåé¡ã¯ã¢ãã€ã«ã¢ããªãåŸã§åºããšãã«è¡šããŸãããã®æã«ã¯ãšã³ããã€ã³ããããªããããŠããïŒãã£ãŒã«ãããªããŒã ããããåæå€ãå€ãã£ãããããšã³ããã€ã³ãã以åã¯"ãªãã·ã§ã³"ã ã£ããã©ã¡ãŒã¿ãå¿ é ã«ããŠãããã¢ãã€ã«ããŒã ã¯ã©ã³ãã ãª400ã§ãããã®äžäžèŽãé ããŠçºèŠãããŠãŒã¶ãŒã¯"äœããééã£ãŠãã"ããèŠããªããããµããŒããå¢ããŸãã
å¥çŽãã¡ãŒã¹ãèšèšãªãã管çWebãã¢ãã€ã«ãæåããåã圢ãååãã«ãŒã«ã«é ŒããŸããå®è£ ã®è©³çްãåŸã§å€ãã£ãŠããå¥çŽãå ±æåç §ãšããŠæ®ããŸããã¯ã©ã€ã¢ã³ãçæã®å©ç¹ã倧ãããã¢ãã€ã«ã¯åä»ãã®ãªã¯ãšã¹ããã¢ãã«ãçæããŠææžããã代ããã«äœ¿ããŸãã
ããªããŒã·ã§ã³ã¯ãŠãŒã¶ãŒãæãå·®ãæããéšåã§ããäŸïŒã¢ãã€ã«ãåœã³ãŒãã®ãªãé»è©±çªå·ãéã£ããšããŸããçã®ã¬ã¹ãã³ã¹ã"400 Bad Request"ã§ã¯ç¡æå³ã§ãããã©ãããã©ãŒã 暪æã§äžè²«ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªãšã©ãŒå¿çã®äŸïŒ
code:INVALID_FIELDfield:phonemessage:Enter a phone number with country code (example: +14155552671).hint:Add your country prefix, then retry.
ãã®åäžã®å€æŽã§ãããã¯ãšã³ãã®ã«ãŒã«ãå®éã®äººã«ãšã£ãŠã®æç¢ºãªæ¬¡ã®äžæã«ãªããŸãã管çããŒã«ã§ãã¢ãã€ã«ã§ãåãã§ãã
次ã®äžæïŒãã€ããããéžã³ããšã©ãŒãæšæºåããŠèªä¿¡ãæã£ãŠæ§ç¯ãã
å®çšçãªç®å®ïŒAPIãè€æ°ããŒã ãè€æ°ã¯ã©ã€ã¢ã³ãïŒWebãã¢ãã€ã«ãããŒãããŒïŒã«å ±æããããªãOpenAPI-firstãéžãã§ãã ãããå šãŠã1ããŒã ã管çãAPIãæ¥ã å€ããæ¢çŽ¢æ®µéãªãcode-firstãéžãã§ãè¯ãã§ãããããã§ãã³ãŒãããOpenAPI仿§ãçæããŠå¥çŽã倱ããªãããã«ããŠãã ããã
å¥çŽãã©ãã«çœ®ãããã©ãã¬ãã¥ãŒãããããæ±ºããŠãã ãããæãåçŽãªèšå®ã¯ãOpenAPIãã¡ã€ã«ãããã¯ãšã³ããšåããªããžããªã«çœ®ãããã¹ãŠã®å€æŽã¬ãã¥ãŒã§å¿ é ã«ããããšã§ããå¥çŽã«ã¯æç¢ºãªãªãŒããŒïŒå€ãã®å ŽåAPIãªãŒããŒãããã¯ãªãŒãïŒãã€ããã¢ããªãå£ãåŸã倿Žã«ã¯å°ãªããšã1人ã®ã¯ã©ã€ã¢ã³ãéçºè ãã¬ãã¥ãŒã«å«ããŠãã ããã
æäœæ¥ã§ããããéšåãã³ãŒãã£ã³ã°ããã«éãåããããªããå¥çŽé§åã®ã¢ãããŒãã¯no-codeãã©ãããã©ãŒã ã«ãåããŸããäŸãã°AppMaster (appmaster.io) ã¯åãåºç€ã¢ãã«ããããã¯ãšã³ããšWeb/ã¢ãã€ã«ã¢ããªãçæã§ããèŠä»¶ãå€ãã£ãŠãAPIã®æ¯ãèããšUIæåŸ ãæããããããŸãã
å°ããªå®çžŸãäœã£ãŠããæ¡å€§ããŠãã ããïŒ
- å®ãŠãŒã¶ãŒããã2ã5åã®ãšã³ããã€ã³ããšå°ãªããšã1ã€ã®ã¯ã©ã€ã¢ã³ããéžã¶ã
- ãšã©ãŒå¿çãæšæºåããŠã"400"ãã©ã®ãã£ãŒã«ãã倱æããããšäœãçŽãããåããã¡ãã»ãŒãžã«ããã
- ã¯ãŒã¯ãããŒã«å¥çŽãã§ãã¯ã远å ããïŒç Žå£çå·®åã®ãã§ãã¯ãåºæ¬çãªlintãã¬ã¹ãã³ã¹ãå¥çŽã«åãããšãæ€èšŒãããã¹ãïŒã
ãã®3ã€ããã£ããããã°ãæ®ãã®APIã¯äœãã®ãããã¥ã¡ã³ãåããã®ããµããŒãããã®ããã£ãšæ¥œã«ãªããŸãã
ãããã質å
è€æ°ã®ã¯ã©ã€ã¢ã³ããããŒã ãåãAPIã«äŸåããå Žåã¯ãOpenAPI-first ãéžãã§ãã ãããå¥çŽãå ±éã®åç §ã«ãªããé©ããæžããŸãããµãŒããšã¯ã©ã€ã¢ã³ããåãããŒã ã管çããAPIã®åœ¢ãé »ç¹ã«å€ããæ¢çŽ¢æ®µéãªã code-first ãé©ããŠããŸãããã ããã©ã¡ãã®å Žåã仿§ãçæããŠã¬ãã¥ãŒãç¶ããæŽåæ§ãä¿ã£ãŠãã ããã
ãçã®åç §ãã匷å¶ãããŠããªããšãã«èµ·ããŸããcontract-firstã§ã¯ã倿ŽåŸã«ä»æ§ãæŽæ°ãããªããªããšããªãããçºçããŸããcode-firstã§ã¯ãå®è£ ãå€ãã£ãŠã泚éãçæãããããã¥ã¡ã³ããå®éã®ã¹ããŒã¿ã¹ã³ãŒããå¿ é ãã£ãŒã«ãããšããžã±ãŒã¹ãåæ ããªããªããšããªããããŸãã
å¥çŽããã«ã倱æã«ã§ãããã®ãšããŠæ±ã£ãŠãã ãããå¥çŽå€æŽã®ç Žå£çå·®åãæ¯èŒããèªåãã§ãã¯ãå°å ¥ãããªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãã¹ããŒãã«åèŽããããšãæ€èšŒãããã¹ããããã«ãŠã§ã¢ã远å ããŠããããã€åã«äžæŽåãæ€åºããŸãã
è€æ°ã®ã¢ããªãAPIãæ¶è²»ããå Žåãçæãããã¯ã©ã€ã¢ã³ãã¯äŸ¡å€ããããŸããåãã¡ãœãã眲åããã£ãŒã«ãåã®èª€ããæ¬ èœããåæå€ãšãã£ããã¹ãé²ããŸããã«ã¹ã¿ã æåãå¿ èŠãªå Žåã¯é¢åã«ãªãããšãããã®ã§ãäœã¬ãã«ã®ã¯ã©ã€ã¢ã³ããšåãçæãããã®äžã«èãææžãã®ã©ãããŒã眮ãã®ãçŸå®çãªæè¡·æ¡ã§ãã
ç Žå£ç倿Žãé¿ããããã«ãæ¢å®ã§ã¯è¿œå çãªå€æŽïŒæ°ãããªãã·ã§ã³ã®ãã£ãŒã«ãããšã³ããã€ã³ãã®è¿œå ïŒã«ããŠãã ãããç Žå£ç倿Žãå¿ èŠãªå Žåã¯æç€ºçã«ããŒãžã§ã³ç®¡çããŠãã¬ãã¥ãŒã§å¯èŠåããŸããç¡èšã®ãªããŒã ãå倿Žã¯ãæšæ¥ã¯åããŠãããåé¡ãçã¿ãŸãã
ãšã³ããã€ã³ãå šäœã§äžè²«ããJSONãšã©ãŒåœ¢ç¶ãæ¡çšããåãšã©ãŒãå®è¡å¯èœã«ããŠãã ããïŒå®å®ãããšã©ãŒã³ãŒãã該åœãã£ãŒã«ãïŒããå ŽåïŒã人éåãã®ã¡ãã»ãŒãžïŒäœãå€ããã°ãããïŒããããã¬ãã«ã®ã¡ãã»ãŒãžã¯çããããã¹ããŒãæ€èšŒã«å€±æããŸããããšãã£ãå éšçšèªãæŒãããªãã§ãã ããã
å¢çïŒãã³ãã©ãã²ãŒããŠã§ã€ïŒã§åœ¢ç¶ã»åã»ãã©ãŒãããã»åæå€ãæ€èšŒããäžæ£ãªå ¥åã¯æ©æã«äžè²«ããŠåŒŸãããã«ããŸããããžãã¹ã«ãŒã«ã¯ãµãŒãã¹å±€ã§æ€èšŒããããŒã¿ããŒã¹ã¯äžæå¶çŽãå€éšããŒãnot-nullã®ãããªçµ¶å¯Ÿã«å®ãã¹ãå¶çŽãæ ãå®å šçãšããŠæ±ã£ãŠãã ãããããŒã¿ããŒã¹ãšã©ãŒã¯äž»ãªãŠãŒã¶ãŒäœéšã§ã¯ãªãæåŸã®å®ãã§ãã
人ããã®ãŸãŸã³ããŒããŠå®éã®ãªã¯ãšã¹ãã«äœ¿ãã®ãäŸãªã®ã§ãééã£ãäŸã¯å®éã®äžæ£ãªãã©ãã£ãã¯ãçã¿ãŸããäŸã¯å¿ é ãã£ãŒã«ãããã©ãŒãããã«åãããã«ä¿ã¡ãAPIãå€ãã£ãããã¹ãã±ãŒã¹ã®ããã«æŽæ°ããã®ãå®å šã§ãã
æ¬çªã«è¿ãå°ããªç¯å²ããå§ããŸãã1ã3ã€ã®ãšã³ããã€ã³ããšæ°åã®ãšã©ãŒã±ãŒã¹ããããªãœãŒã¹ãéžã³ããå®äºãã®å®çŸ©ãæç¢ºã«ããŠããšã©ãŒã®æšæºåãšCIã®å¥çŽãã§ãã¯ã远å ããŸãããã®ã¯ãŒã¯ãããŒãæ»ãããªãããšã³ããã€ã³ãããšã«æ¡åŒµããŠãã ããã
ã¯ããèŠä»¶ãå€ãã£ãŠãå€ã決å®ãéã³ç¶ããªãããã«ããã®ãç®çãªããno-codeãã©ãããã©ãŒã ã¯åœ¹ç«ã¡ãŸããAppMaster (appmaster.io) ã®ãããªããŒã«ã¯ãå ±éã®ã¢ãã«ããããã¯ãšã³ããšã¯ã©ã€ã¢ã³ããåçæã§ããå¥çŽé§åéçºãšåãèãæ¹ãã€ãŸããäžã€ã®å®çŸ©ãæŽã£ãæ¯ãèãããã¹ããããå°ãªããããšã«åèŽããŸãã


