APIããŒãžããŒã·ã§ã³æŠç¥ãå®è£ ãã¿ãŒã³ãã¹ã±ãŒã©ãã«ã§å¹ççãªããŒã¿ååŸã·ã¹ãã ãæ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ã«é¢ããå æ¬çãªã¬ã€ãã
APIããŒãžããŒã·ã§ã³ïŒã¹ã±ãŒã©ãã«ãªããŒã¿ååŸã®ããã®å®è£ ãã¿ãŒã³
仿¥ã®ããŒã¿é§ååã®äžçã§ã¯ãAPIïŒã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ãŒã¹ïŒã¯æ°ãåããªãã»ã©ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã¯ããŒã³ãšããŠæ©èœããŠããŸããAPIã¯ç°ãªãã·ã¹ãã éã®ã·ãŒã ã¬ã¹ãªéä¿¡ãšããŒã¿äº€æãå¯èœã«ããŸããããããå€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåããã¹ãŠã®ããŒã¿ãåäžã®ãªã¯ãšã¹ãã§ååŸãããšãããã©ãŒãã³ã¹ã®ããã«ããã¯ãé ãã¬ã¹ãã³ã¹æéããããŠå£æªãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããå¯èœæ§ããããŸããããã§APIããŒãžããŒã·ã§ã³ã圹ç«ã¡ãŸããããŒãžããŒã·ã§ã³ã¯ãå€§èŠæš¡ãªããŒã¿ã»ãããããå°ããã管çãããããã£ã³ã¯ã«åå²ããããã®éèŠãªæè¡ã§ãããã¯ã©ã€ã¢ã³ããäžé£ã®ãªã¯ãšã¹ãã§ããŒã¿ãååŸã§ããããã«ããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãããŸããŸãªAPIããŒãžããŒã·ã§ã³æŠç¥ãå®è£ ãã¿ãŒã³ãããã³ã¹ã±ãŒã©ãã«ã§å¹ççãªããŒã¿ååŸã·ã¹ãã ãæ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ãæ¢æ±ããŸããåã¢ãããŒãã®å©ç¹ã𿬠ç¹ãæãäžããç¹å®ã®ããŒãºã«é©ããããŒãžããŒã·ã§ã³æŠç¥ãéžæããããã®å®çšçãªäŸãšèæ ®äºé ãæäŸããŸãã
APIããŒãžããŒã·ã§ã³ã¯ãªãéèŠãïŒ
å®è£ ã®è©³çްã«å ¥ãåã«ãAPIéçºã«ãããŠããŒãžããŒã·ã§ã³ããªãããã»ã©éèŠãªã®ããçè§£ããŸãããã
- ããã©ãŒãã³ã¹ã®åäžïŒåãªã¯ãšã¹ãã§è¿ãããããŒã¿éãå¶éããããšã§ãããŒãžããŒã·ã§ã³ã¯ãµãŒããŒã®åŠçè² è·ã軜æžãããããã¯ãŒã¯åž¯åå¹ ã®äœ¿çšéãæå°éã«æããŸããããã«ãããã¬ã¹ãã³ã¹æéãççž®ãããããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒããŒãžããŒã·ã§ã³ã«ãããAPIã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããããšãªãå€§èŠæš¡ãªããŒã¿ã»ãããåŠçã§ããŸããããŒã¿ãå¢å ããã«ã€ããŠãå¢å ããè² è·ã«å¯Ÿå¿ããããã«APIã€ã³ãã©ã¹ãã©ã¯ãã£ãç°¡åã«ã¹ã±ãŒã«ã§ããŸãã
- ã¡ã¢ãªæ¶è²»éã®åæžïŒå·šå€§ãªããŒã¿ã»ãããæ±ãéããã¹ãŠã®ããŒã¿ãäžåºŠã«ã¡ã¢ãªã«ããŒããããšããµãŒããŒãªãœãŒã¹ãããã«äœ¿ãæãããŠããŸãå¯èœæ§ããããŸããããŒãžããŒã·ã§ã³ã¯ãããŒã¿ãããå°ããªãã£ã³ã¯ã§åŠçããããšã«ãããã¡ã¢ãªæ¶è²»éãåæžããã®ã«åœ¹ç«ã¡ãŸãã
- ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒãŠãŒã¶ãŒã¯ãããŒã¿ãšã®å¯Ÿè©±ãéå§ããåã«ããŒã¿ã»ããå šäœãããŒããããã®ãåŸ ã€å¿ èŠããããŸãããããŒãžããŒã·ã§ã³ã«ããããŠãŒã¶ãŒã¯ããçŽæçã§å¹ççãªæ¹æ³ã§ããŒã¿ãé²èЧã§ããŸãã
- ã¬ãŒãå¶éã®èæ ®äºé ïŒå€ãã®APIãããã€ããŒã¯ãä¹±çšãé²ããå ¬æ£ãªäœ¿çšã確ä¿ããããã«ã¬ãŒãå¶éãå®è£ ããŠããŸããããŒãžããŒã·ã§ã³ã«ãããã¯ã©ã€ã¢ã³ãã¯è€æ°ã®ããå°ããªãªã¯ãšã¹ããè¡ãããšã§ãã¬ãŒãå¶éã®å¶çŽå ã§å€§èŠæš¡ãªããŒã¿ã»ãããååŸã§ããŸãã
äžè¬çãªAPIããŒãžããŒã·ã§ã³æŠç¥
APIããŒãžããŒã·ã§ã³ãå®è£ ããã«ã¯ããã€ãã®äžè¬çãªæŠç¥ããããããããã«é·æãšçæããããŸããæãäžè¬çãªã¢ãããŒãã®ããã€ããæ¢ã£ãŠã¿ãŸãããã
1. ãªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³
ãªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯æãã·ã³ãã«ã§åºã䜿ãããŠããããŒãžããŒã·ã§ã³æŠç¥ã§ããAPIãªã¯ãšã¹ãã§ãªãã»ããïŒéå§ç¹ïŒãšãªãããïŒååŸããã¢ã€ãã æ°ïŒãæå®ããŸãã
äŸïŒ
GET /users?offset=0&limit=25
ãã®ãªã¯ãšã¹ãã¯æåã®25人ã®ãŠãŒã¶ãŒãååŸããŸãïŒæåã®ãŠãŒã¶ãŒããéå§ïŒã次ã®ããŒãžã®ãŠãŒã¶ãŒãååŸããã«ã¯ããªãã»ãããã€ã³ã¯ãªã¡ã³ãããŸãã
GET /users?offset=25&limit=25
å©ç¹ïŒ
- å®è£ ãšçè§£ã容æã
- ã»ãšãã©ã®ããŒã¿ããŒã¹ãšãã¬ãŒã ã¯ãŒã¯ã§åºããµããŒããããŠããã
æ¬ ç¹ïŒ
- ããã©ãŒãã³ã¹ã®åé¡ïŒãªãã»ãããå¢å ããã«ã€ããŠãããŒã¿ããŒã¹ã¯å€æ°ã®ã¬ã³ãŒããã¹ãããããå¿ èŠããããããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸããããã¯ç¹ã«å€§èŠæš¡ãªããŒã¿ã»ããã§é¡èã§ãã
- çµæã®äžæŽåïŒã¯ã©ã€ã¢ã³ããããŒã¿ãããŒãžåå²ããŠããéã«æ°ããã¢ã€ãã ãæ¿å ¥ãŸãã¯åé€ããããšãçµæãäžæŽåã«ãªãå¯èœæ§ããããŸããäŸãã°ããŠãŒã¶ãŒãã¹ããããããããè€æ°å衚瀺ããããããããšããããŸããããã¯ãã°ãã°ããã¡ã³ãã ãªãŒããåé¡ãšåŒã°ããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- ããã©ãŒãã³ã¹ãéèŠãªæžå¿µäºé ã§ã¯ãªãäžå°èŠæš¡ã®ããŒã¿ã»ããã
- ããŒã¿ã®äžè²«æ§ãæéèŠã§ã¯ãªãã·ããªãªã
2. ã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ïŒã·ãŒã¯ã¡ãœããïŒ
ã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯ãã·ãŒã¯ã¡ãœãããŸãã¯ããŒã»ããããŒãžããŒã·ã§ã³ãšããŠãç¥ãããã«ãŒãœã«ã䜿çšããŠæ¬¡ã®çµæããŒãžã®éå§ç¹ãç¹å®ããããšã§ããªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³ã®éçã«å¯ŸåŠããŸããã«ãŒãœã«ã¯éåžžãããŒã¿ã»ããå ã®ç¹å®ã®ã¬ã³ãŒãã衚ãäžéæãªæååã§ããããã¯ãããé«éãªååŸã®ããã«ããŒã¿ããŒã¹ã®åºæã®ã€ã³ããã¯ã¹ãå©çšããŸãã
äŸïŒ
ããŒã¿ãã€ã³ããã¯ã¹ä»ãã®åïŒäŸïŒ`id`ã`created_at`ïŒã§ãœãŒããããŠãããšä»®å®ãããšãAPIã¯æåã®ãªã¯ãšã¹ãã§ã«ãŒãœã«ãè¿ããããããŸããã
GET /products?limit=20
ã¬ã¹ãã³ã¹ã«ã¯ä»¥äžãå«ãŸããå¯èœæ§ããããŸãã
{
"data": [...],
"next_cursor": "eyJpZCI6IDMwLCJjcmVhdGVkX2F0IjoiMjAyMy0xMC0yNCAxMDowMDowMCJ9"
}
次ã®ããŒãžãååŸããããã«ãã¯ã©ã€ã¢ã³ãã¯`next_cursor`ã®å€ã䜿çšããŸãã
GET /products?limit=20&cursor=eyJpZCI6IDMwLCJjcmVhdGVkX2F0IjoiMjAyMy0xMC0yNCAxMDowMDowMCJ9
å©ç¹ïŒ
- ããã©ãŒãã³ã¹ã®åäžïŒã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ããã«ãããŠããªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³ãããå€§å¹ ã«åªããããã©ãŒãã³ã¹ãæäŸããŸãã倿°ã®ã¬ã³ãŒããã¹ãããããå¿ èŠããªããªããŸãã
- ããäžè²«ããçµæïŒãã¹ãŠã®ããŒã¿å€æŽåé¡ã«å¯ŸããŠäžèœã§ã¯ãããŸããããã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯äžè¬çã«ããªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³ãããæ¿å ¥ãåé€ã«å¯ŸããŠå埩åããããŸããããã¯ããœãŒãã«äœ¿çšãããã€ã³ããã¯ã¹ä»ãåã®å®å®æ§ã«äŸåããŸãã
æ¬ ç¹ïŒ
- ããè€éãªå®è£ ïŒã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯ããµãŒããŒåŽãšã¯ã©ã€ã¢ã³ãåŽã®äž¡æ¹ã§ããè€éãªããžãã¯ãå¿ èŠãšããŸãããµãŒããŒã¯ã«ãŒãœã«ãçæã»è§£éããå¿ èŠããããã¯ã©ã€ã¢ã³ãã¯åŸç¶ã®ãªã¯ãšã¹ãã§ã«ãŒãœã«ãä¿åã»æž¡ãå¿ èŠããããŸãã
- æè»æ§ã®äœãïŒã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯éåžžãå®å®ãããœãŒãé ãå¿ èŠãšããŸãããœãŒãåºæºãé »ç¹ã«å€æŽãããå Žåã¯å®è£ ãå°é£ã«ãªãããšããããŸãã
- ã«ãŒãœã«ã®æå¹æéïŒã«ãŒãœã«ã¯äžå®æéåŸã«æéåãã«ãªãå¯èœæ§ããããã¯ã©ã€ã¢ã³ãã¯ããããæŽæ°ããå¿ èŠããããŸããããã«ãããã¯ã©ã€ã¢ã³ãåŽã®å®è£ ãè€éã«ãªããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- ããã©ãŒãã³ã¹ãéèŠãªå€§èŠæš¡ããŒã¿ã»ããã
- ããŒã¿ã®äžè²«æ§ãéèŠãªã·ããªãªã
- å®å®ãããœãŒãé ãå¿ èŠãšããAPIã
3. ããŒã»ããããŒãžããŒã·ã§ã³
ããŒã»ããããŒãžããŒã·ã§ã³ã¯ã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã®äžçš®ã§ãç¹å®ã®ããŒïŒãŸãã¯ããŒã®çµã¿åããïŒã®å€ã䜿çšããŠã次ã®çµæããŒãžã®éå§ç¹ãç¹å®ããŸãããã®ã¢ãããŒãã¯ãäžéæãªã«ãŒãœã«ã®å¿ èŠæ§ããªãããå®è£ ãç°¡çŽ åã§ããŸãã
äŸïŒ
ããŒã¿ã`id`ã®æé ã§ãœãŒããããŠãããšä»®å®ãããšãAPIã¯ã¬ã¹ãã³ã¹ã§`last_id`ãè¿ããããããŸããã
GET /articles?limit=10
{
"data": [...],
"last_id": 100
}
次ã®ããŒãžãååŸããããã«ãã¯ã©ã€ã¢ã³ãã¯`last_id`ã®å€ã䜿çšããŸãã
GET /articles?limit=10&after_id=100
ãµãŒããŒã¯ãã®åŸã`id`ã`100`ãã倧ããèšäºãããŒã¿ããŒã¹ã«åãåãããŸãã
å©ç¹ïŒ
- åçŽãªå®è£ ïŒããŒã»ããããŒãžããŒã·ã§ã³ã¯ãè€éãªã«ãŒãœã«ã®ãšã³ã³ãŒããšãã³ãŒãã®å¿ èŠããªããããã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ãããå®è£ ãç°¡åãªããšãå€ãã§ãã
- ããã©ãŒãã³ã¹ã®åäžïŒã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ãšåæ§ã«ãããŒã»ããããŒãžããŒã·ã§ã³ã¯å€§èŠæš¡ãªããŒã¿ã»ããã«å¯ŸããŠåªããããã©ãŒãã³ã¹ãæäŸããŸãã
æ¬ ç¹ïŒ
- äžæã®ããŒãå¿ èŠïŒããŒã»ããããŒãžããŒã·ã§ã³ã¯ãããŒã¿ã»ããå ã®åã¬ã³ãŒããèå¥ããããã«äžæã®ããŒïŒãŸãã¯ããŒã®çµã¿åããïŒãå¿ èŠãšããŸãã
- ããŒã¿å€æŽã«ææïŒã«ãŒãœã«ããŒã¹ãšåæ§ããªãã»ãããããããã«ããœãŒãé ã«åœ±é¿ãäžããæ¿å ¥ãåé€ã«ææã«ãªãå¯èœæ§ããããŸããããŒã®æ éãªéžæãéèŠã§ãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- ããã©ãŒãã³ã¹ãéèŠãªå€§èŠæš¡ããŒã¿ã»ããã
- äžæã®ããŒãå©çšå¯èœãªã·ããªãªã
- ããåçŽãªããŒãžããŒã·ã§ã³å®è£ ãæãŸããå Žåã
4. ã·ãŒã¯ã¡ãœããïŒããŒã¿ããŒã¹åºæïŒ
äžéšã®ããŒã¿ããŒã¹ã¯ãå¹ççãªããŒãžããŒã·ã§ã³ã«äœ¿çšã§ãããã€ãã£ãã®ã·ãŒã¯ã¡ãœãããæäŸããŠããŸãããããã®ã¡ãœããã¯ãããŒã¿ããŒã¹ã®å éšã€ã³ããã¯ã¹ãšã¯ãšãªæé©åæ©èœãå©çšããŠãããŒãžåå²ãããæ¹æ³ã§ããŒã¿ãååŸããŸããããã¯æ¬è³ªçã«ãããŒã¿ããŒã¹åºæã®æ©èœã䜿çšããã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã§ãã
äŸïŒPostgreSQLïŒïŒ
PostgreSQLã®`ROW_NUMBER()`ãŠã£ã³ããŠé¢æ°ããµãã¯ãšãªãšçµã¿åãããããšã§ãã·ãŒã¯ããŒã¹ã®ããŒãžããŒã·ã§ã³ãå®è£ ã§ããŸãããã®äŸã§ã¯ã`events`ãšããããŒãã«ãæ³å®ããã¿ã€ã ã¹ã¿ã³ã`event_time`ã«åºã¥ããŠããŒãžããŒã·ã§ã³ãè¡ããŸãã
SQLã¯ãšãªïŒ
SELECT * FROM (
SELECT
*,
ROW_NUMBER() OVER (ORDER BY event_time) as row_num
FROM
events
) as numbered_events
WHERE row_num BETWEEN :start_row AND :end_row;
å©ç¹ïŒ
- æé©åãããããã©ãŒãã³ã¹ïŒããŒã¿ããŒã¹åºæã®ã·ãŒã¯ã¡ãœããã¯ãéåžžãããã©ãŒãã³ã¹ãé«åºŠã«æé©åãããŠããŸãã
- ç°¡çŽ åãããå®è£ ïŒå Žåã«ããïŒïŒããŒã¿ããŒã¹ãããŒãžããŒã·ã§ã³ããžãã¯ãåŠçãããããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®è€éãã軜æžãããŸãã
æ¬ ç¹ïŒ
- ããŒã¿ããŒã¹ãžã®äŸåïŒãã®ã¢ãããŒãã¯ã䜿çšããŠããç¹å®ã®ããŒã¿ããŒã¹ã«å¯æ¥ã«çµåãããŸããããŒã¿ããŒã¹ãåãæ¿ããã«ã¯ãå€§å¹ ãªã³ãŒã倿Žãå¿ èŠã«ãªãå ŽåããããŸãã
- è€éãïŒå Žåã«ããïŒïŒãããã®ããŒã¿ããŒã¹åºæã®ã¡ãœãããçè§£ããå®è£ ããããšã¯è€éã«ãªãå¯èœæ§ããããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- ãã€ãã£ãã®ã·ãŒã¯ã¡ãœãããæäŸããããŒã¿ããŒã¹ã䜿çšããå Žåã
- ããã©ãŒãã³ã¹ãæåªå ã§ãããŒã¿ããŒã¹ãžã®äŸåã蚱容ã§ããå Žåã
é©åãªããŒãžããŒã·ã§ã³æŠç¥ã®éžæ
é©åãªããŒãžããŒã·ã§ã³æŠç¥ã®éžæã¯ã以äžãå«ãããã€ãã®èŠå ã«äŸåããŸãã
- ããŒã¿ã»ããã®ãµã€ãºïŒå°ããªããŒã¿ã»ããã®å Žåããªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³ã§ååãããããŸããã倧ããªããŒã¿ã»ããã®å Žåã¯ãã«ãŒãœã«ããŒã¹ãŸãã¯ããŒã»ããããŒãžããŒã·ã§ã³ãäžè¬çã«å¥œãŸããŸãã
- ããã©ãŒãã³ã¹èŠä»¶ïŒããã©ãŒãã³ã¹ãéèŠãªå Žåã¯ãã«ãŒãœã«ããŒã¹ãŸãã¯ããŒã»ããããŒãžããŒã·ã§ã³ãããè¯ãéžæã§ãã
- ããŒã¿äžè²«æ§èŠä»¶ïŒããŒã¿ã®äžè²«æ§ãéèŠãªå Žåã¯ãã«ãŒãœã«ããŒã¹ãŸãã¯ããŒã»ããããŒãžããŒã·ã§ã³ãæ¿å ¥ãåé€ã«å¯Ÿããããè¯ãèæ§ãæäŸããŸãã
- å®è£ ã®è€éãïŒãªãã»ããããŒã¹ã®ããŒãžããŒã·ã§ã³ãæãå®è£ ãç°¡åã§ãããã«ãŒãœã«ããŒã¹ã®ããŒãžããŒã·ã§ã³ã¯ããè€éãªããžãã¯ãå¿ èŠãšããŸãã
- ããŒã¿ããŒã¹ã®ãµããŒãïŒäœ¿çšããŠããããŒã¿ããŒã¹ãå®è£ ãç°¡çŽ åã§ãããã€ãã£ãã®ã·ãŒã¯ã¡ãœãããæäŸããŠãããã©ãããæ€èšããŠãã ããã
- APIèšèšã®èæ ®äºé ïŒAPIå šäœã®èšèšãšãããŒãžããŒã·ã§ã³ãããåºãæèã«ã©ã®ããã«é©åããããèããŠãã ãããæšæºåãããã¬ã¹ãã³ã¹ã®ããã«JSON:API仿§ã®äœ¿çšãæ€èšããŠãã ããã
å®è£ ã®ãã¹ããã©ã¯ãã£ã¹
éžæããããŒãžããŒã·ã§ã³æŠç¥ã«é¢ä¿ãªãã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãã
- äžè²«ããåœåèŠåã䜿çšããïŒããŒãžããŒã·ã§ã³ãã©ã¡ãŒã¿ã«ã¯äžè²«æ§ã®ããèšè¿°çãªååã䜿çšããŸãïŒäŸïŒ`offset`, `limit`, `cursor`, `page`, `page_size`ïŒã
- ããã©ã«ãå€ãæäŸããïŒã¯ã©ã€ã¢ã³ãåŽã®å®è£ ãç°¡çŽ åããããã«ãããŒãžããŒã·ã§ã³ãã©ã¡ãŒã¿ã«é©åãªããã©ã«ãå€ãæäŸããŸããäŸãã°ãããã©ã«ãã®`limit`ãšããŠ25ã50ãäžè¬çã§ãã
- å ¥åãã©ã¡ãŒã¿ãæ€èšŒããïŒç¡å¹ãŸãã¯æªæã®ããå ¥åãé²ãããã«ãããŒãžããŒã·ã§ã³ãã©ã¡ãŒã¿ãæ€èšŒããŸãã`offset`ãš`limit`ãéè² ã®æŽæ°ã§ããã`limit`ã劥åœãªæå€§å€ãè¶ ããªãããšã確èªããŸãã
- ããŒãžããŒã·ã§ã³ã¡ã¿ããŒã¿ãè¿ãïŒAPIã¬ã¹ãã³ã¹ã«ããŒãžããŒã·ã§ã³ã¡ã¿ããŒã¿ãå«ããã¯ã©ã€ã¢ã³ãã«ã¢ã€ãã ã®ç·æ°ãçŸåšã®ããŒãžã次ã®ããŒãžãåã®ããŒãžïŒè©²åœããå ŽåïŒã«é¢ããæ å ±ãæäŸããŸãããã®ã¡ã¿ããŒã¿ã¯ãã¯ã©ã€ã¢ã³ããããŒã¿ã»ããããã广çã«ããã²ãŒãããã®ã«åœ¹ç«ã¡ãŸãã
- HATEOASïŒHypermedia as the Engine of Application StateïŒã䜿çšããïŒHATEOASã¯ãAPIã¬ã¹ãã³ã¹ã«é¢é£ãªãœãŒã¹ãžã®ãªã³ã¯ãå«ãããšããRESTful APIã®èšèšååã§ããããŒãžããŒã·ã§ã³ã®å Žåãããã¯æ¬¡ãšåã®ããŒãžãžã®ãªã³ã¯ãå«ããããšãæå³ããŸããããã«ãããã¯ã©ã€ã¢ã³ãã¯URLãããŒãã³ãŒãã£ã³ã°ããããšãªããå©çšå¯èœãªããŒãžããŒã·ã§ã³ãªãã·ã§ã³ãåçã«çºèŠã§ããŸãã
- ãšããžã±ãŒã¹ãé©åã«åŠçããïŒç¡å¹ãªã«ãŒãœã«å€ãç¯å²å€ã®ãªãã»ãããªã©ã®ãšããžã±ãŒã¹ãé©åã«åŠçããŸããã¯ã©ã€ã¢ã³ããåé¡ããã©ãã«ã·ã¥ãŒãã£ã³ã°ããã®ã«åœ¹ç«ã€æçãªãšã©ãŒã¡ãã»ãŒãžãè¿ããŸãã
- ããã©ãŒãã³ã¹ãç£èŠããïŒããŒãžããŒã·ã§ã³å®è£ ã®ããã©ãŒãã³ã¹ãç£èŠããŠãæœåšçãªããã«ããã¯ãç¹å®ããããã©ãŒãã³ã¹ãæé©åããŸããããŒã¿ããŒã¹ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãã¯ãšãªå®è¡èšç»ãåæããé ãã¯ãšãªãç¹å®ããŸãã
- APIãææžåããïŒäœ¿çšãããŠããããŒãžããŒã·ã§ã³æŠç¥ãå©çšå¯èœãªãã©ã¡ãŒã¿ãããŒãžããŒã·ã§ã³ã¡ã¿ããŒã¿ã®åœ¢åŒã«é¢ãã詳现æ å ±ãå«ããæç¢ºã§å æ¬çãªAPIã®ããã¥ã¡ã³ããæäŸããŸããSwagger/OpenAPIãªã©ã®ããŒã«ã¯ãããã¥ã¡ã³ãã®èªååã«åœ¹ç«ã¡ãŸãã
- APIã®ããŒãžã§ãã³ã°ãæ€èšããïŒAPIãé²åããã«ã€ããŠãããŒãžããŒã·ã§ã³æŠç¥ã倿Žããããæ°ããæ©èœã远å ãããããå¿ èŠããããããããŸãããæ¢åã®ã¯ã©ã€ã¢ã³ããå£ããªãããã«ãAPIã®ããŒãžã§ãã³ã°ã䜿çšããŸãã
GraphQLã§ã®ããŒãžããŒã·ã§ã³
äžèšã®äŸã¯REST APIã«çŠç¹ãåœãŠãŠããŸãããGraphQL APIãæ±ãéã«ãããŒãžããŒã·ã§ã³ã¯éèŠã§ããGraphQLã¯ãããŒãžããŒã·ã§ã³ã®ããã®ããã€ãã®çµã¿èŸŒã¿ã¡ã«ããºã ãæäŸããŠããŸãã
- ã³ãã¯ã·ã§ã³ã¿ã€ãïŒGraphQLã®ã³ãã¯ã·ã§ã³ãã¿ãŒã³ã¯ãããŒãžããŒã·ã§ã³ãå®è£ ããããã®æšæºåãããæ¹æ³ãæäŸããŸããããã¯ã`edges`ãã£ãŒã«ãïŒããŒãã®ãªã¹ããå«ãïŒãš`pageInfo`ãã£ãŒã«ãïŒçŸåšã®ããŒãžã«é¢ããã¡ã¿ããŒã¿ãå«ãïŒãå«ãã³ãã¯ã·ã§ã³ã¿ã€ããå®çŸ©ããŸãã
- åŒæ°ïŒGraphQLã¯ãšãªã¯ã`first`ïŒååŸããã¢ã€ãã æ°ïŒã`after`ïŒæ¬¡ã®ããŒãžã®éå§ç¹ã衚ãã«ãŒãœã«ïŒã`last`ïŒãªã¹ãã®æ«å°ŸããååŸããã¢ã€ãã æ°ïŒã`before`ïŒåã®ããŒãžã®çµäºç¹ã衚ãã«ãŒãœã«ïŒãªã©ã®ããŒãžããŒã·ã§ã³çšã®åŒæ°ãåãåãããšãã§ããŸãã
äŸïŒ
ã³ãã¯ã·ã§ã³ãã¿ãŒã³ã䜿çšããŠãŠãŒã¶ãŒãããŒãžåå²ããGraphQLã¯ãšãªã¯æ¬¡ã®ããã«ãªããŸãã
query {
users(first: 10, after: "YXJyYXljb25uZWN0aW9uOjEw") {
edges {
node {
id
name
}
cursor
}
pageInfo {
hasNextPage
endCursor
}
}
}
ãã®ã¯ãšãªã¯ãã«ãŒãœã«ãYXJyYXljb25uZWN0aW9uOjEwãã®åŸã®æåã®10人ã®ãŠãŒã¶ãŒãååŸããŸããã¬ã¹ãã³ã¹ã«ã¯ããšããžã®ãªã¹ãïŒããããããŠãŒã¶ãŒããŒããšã«ãŒãœã«ãå«ãïŒãšãããã«ããŒãžããããã©ãããããã³æ¬¡ã®ããŒãžã®ã«ãŒãœã«ã瀺ã`pageInfo`ãªããžã§ã¯ããå«ãŸããŸãã
APIããŒãžããŒã·ã§ã³ã«é¢ããã°ããŒãã«ãªèæ ®äºé
APIããŒãžããŒã·ã§ã³ãèšèšããã³å®è£ ããéã«ã¯ã以äžã®ã°ããŒãã«ãªèŠå ãèæ ®ããããšãéèŠã§ãã
- ã¿ã€ã ãŸãŒã³ïŒAPIãæéäŸåã®ããŒã¿ãæ±ãå Žåãã¿ã€ã ãŸãŒã³ãæ£ããåŠçããããã«ããŠãã ããããã¹ãŠã®ã¿ã€ã ã¹ã¿ã³ããUTCã§ä¿åããã¯ã©ã€ã¢ã³ãåŽã§ãŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æããŸãã
- é貚ïŒAPIãééç䟡å€ãæ±ãå Žåãåå€ã®é貚ãæå®ããŸããäžè²«æ§ã確ä¿ãããããŸãããé¿ããããã«ãISO 4217é貚ã³ãŒãã䜿çšããŸãã
- èšèªïŒAPIãè€æ°ã®èšèªããµããŒãããå ŽåãããŒã«ã©ã€ãºããããšã©ãŒã¡ãã»ãŒãžãšããã¥ã¡ã³ããæäŸããŸãã`Accept-Language`ããããŒã䜿çšããŠããŠãŒã¶ãŒã®åªå èšèªã決å®ããŸãã
- æåçãªéãïŒãŠãŒã¶ãŒãAPIãšå¯Ÿè©±ããæ¹æ³ã«åœ±é¿ãäžããå¯èœæ§ã®ããæåçãªéãã«æ³šæããŠãã ãããäŸãã°ãæ¥ä»ãšæ°å€ã®åœ¢åŒã¯åœã«ãã£ãŠç°ãªããŸãã
- ããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒå人ããŒã¿ãæ±ãéã«ã¯ãGDPRïŒäžè¬ããŒã¿ä¿è·èŠåïŒãCCPAïŒã«ãªãã©ã«ãã¢å·æ¶è²»è ãã©ã€ãã·ãŒæ³ïŒãªã©ã®ããŒã¿ãã©ã€ãã·ãŒèŠå¶ãéµå®ããŠãã ãããé©åãªåæã¡ã«ããºã ãå°å ¥ãããŠããããŠãŒã¶ãŒããŒã¿ãäžæ£ã¢ã¯ã»ã¹ããä¿è·ããŠããããšã確èªããŠãã ããã
çµè«
APIããŒãžããŒã·ã§ã³ã¯ãã¹ã±ãŒã©ãã«ã§å¹ççãªããŒã¿ååŸã·ã¹ãã ãæ§ç¯ããããã®äžå¯æ¬ ãªæè¡ã§ããå€§èŠæš¡ãªããŒã¿ã»ãããããå°ããã管çãããããã£ã³ã¯ã«åå²ããããšã§ãããŒãžããŒã·ã§ã³ã¯ããã©ãŒãã³ã¹ãåäžãããã¡ã¢ãªæ¶è²»ãåæžãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸããé©åãªããŒãžããŒã·ã§ã³æŠç¥ã®éžæã¯ãããŒã¿ã»ããã®ãµã€ãºãããã©ãŒãã³ã¹èŠä»¶ãããŒã¿ã®äžè²«æ§èŠä»¶ãå®è£ ã®è€éããªã©ãããã€ãã®èŠå ã«äŸåããŸãããã®ã¬ã€ãã§æŠèª¬ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ããŠãŒã¶ãŒãšããžãã¹ã®ããŒãºãæºããå ç¢ã§ä¿¡é Œæ§ã®é«ãããŒãžããŒã·ã§ã³ãœãªã¥ãŒã·ã§ã³ãå®è£ ã§ããŸãã
æé©ãªããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã確ä¿ããããã«ãããŒãžããŒã·ã§ã³ã®å®è£ ãç¶ç¶çã«ç£èŠããæé©åããããšãå¿ããªãã§ãã ãããããŒã¿ãå¢å ããAPIãé²åããã«ã€ããŠãããŒãžããŒã·ã§ã³æŠç¥ãåè©äŸ¡ããããã«å¿ããŠå®è£ ãé©å¿ãããå¿ èŠããããããããŸããã