ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã䜿çšããAPIã¬ãŒãå¶éã®å æ¬çãªã¬ã€ããå®è£ ã®è©³çްãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§ã®èæ ®äºé ã解説ããŸãã
APIã¬ãŒãå¶éïŒããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã®å®è£
仿¥ã®çžäºæ¥ç¶ãããäžçã«ãããŠãAPIïŒã¢ããªã±ãŒã·ã§ã³ããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ãŒã¹ïŒã¯æ°ãåããªãã»ã©ã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ã®æ ¹å¹¹ããªããŠããŸãã ããã«ãããç°ãªããœãããŠã§ã¢ã·ã¹ãã ãã·ãŒã ã¬ã¹ã«éä¿¡ããããŒã¿ã亀æããããšãå¯èœã«ãªããŸããããããAPIã®æ®åãšã¢ã¯ã»ã·ããªãã£ã¯ãæœåšçãªä¹±çšãéè² è·ã«æãããåå ãšããªããŸãã é©åãªä¿è·çããªããã°ãAPIã¯ãµãŒãã¹æåŠïŒDoSïŒæ»æããªãœãŒã¹ã®æ¯æžããããŠå šäœçãªããã©ãŒãã³ã¹ã®äœäžã«å¯ŸããŠè匱ã«ãªããŸãã ããã§APIã¬ãŒãå¶éãéèŠãªåœ¹å²ãæãããŸãã
ã¬ãŒãå¶éã¯ãã¯ã©ã€ã¢ã³ããç¹å®ã®æéå ã«è¡ãããªã¯ãšã¹ãæ°ãå¶åŸ¡ããããšã§APIãä¿è·ããããã®éèŠãªæè¡ã§ãã ããã«ãããå ¬æ£ãªå©çšã確ä¿ããä¹±çšãé²ãããã¹ãŠã®ãŠãŒã¶ãŒã«å¯ŸããŠAPIã®å®å®æ§ãšå¯çšæ§ãç¶æããããšãã§ããŸãã ã¬ãŒãå¶éãå®è£ ããããã®æ§ã ãªã¢ã«ãŽãªãºã ãååšãããã®äžã§ãæãããã¥ã©ãŒã§å¹æçãªãã®ã®äžã€ãããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã§ãã
ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ãšã¯ïŒ
ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã¯ãæŠå¿µçã«ã¯ã·ã³ãã«ã§ãããªãããã¬ãŒãå¶éã®ããã®åŒ·åãªã¢ã«ãŽãªãºã ã§ãã ç¹å®ã®æ°ã®ããŒã¯ã³ãä¿æã§ãããã±ãããæ³åããŠã¿ãŠãã ããã ããŒã¯ã³ã¯ãäºåã«å®çŸ©ãããã¬ãŒãã§ãã±ããã«è¿œå ãããŸãã APIãžã®åãªã¯ãšã¹ãã¯ããã±ãããã1ã€ã®ããŒã¯ã³ãæ¶è²»ããŸãã ãã±ããã«ååãªããŒã¯ã³ãããã°ããªã¯ãšã¹ãã¯åŠçãèš±å¯ãããŸãã ãã±ããã空ã®å ŽåïŒã€ãŸããå©çšå¯èœãªããŒã¯ã³ããªãå ŽåïŒããªã¯ãšã¹ãã¯æåŠãããããããŒã¯ã³ãå©çšå¯èœã«ãªããŸã§ãã¥ãŒã«å ¥ããããŸãã
以äžã«äž»èŠãªæ§æèŠçŽ ãæããŸãïŒ
- ãã±ãããµã€ãºïŒå®¹éïŒïŒ ãã±ãããä¿æã§ããããŒã¯ã³ã®æå€§æ°ãããã¯ããŒã¹ã容éãã€ãŸãæ¥ãªãªã¯ãšã¹ãã®ããŒã¹ãã«å¯Ÿå¿ããèœåã衚ããŸãã
- ããŒã¯ã³è£å ã¬ãŒãïŒ ãã±ããã«ããŒã¯ã³ã远å ãããã¬ãŒãã§ãéåžžã¯1ç§ãããã®ããŒã¯ã³æ°ã1åãããã®ããŒã¯ã³æ°ã§æž¬å®ãããŸããããã¯å¹³åçãªã¬ãŒãå¶éãå®çŸ©ããŸãã
- ãªã¯ãšã¹ãïŒ APIãžã®åä¿¡ãªã¯ãšã¹ãã
ä»çµã¿ïŒ
- ãªã¯ãšã¹ããå°çãããšãã¢ã«ãŽãªãºã ã¯ãã±ããå ã«ããŒã¯ã³ããããã©ããã確èªããŸãã
- ãã±ããã«å°ãªããšã1ã€ã®ããŒã¯ã³ãå«ãŸããŠããå Žåãã¢ã«ãŽãªãºã ã¯ããŒã¯ã³ã1ã€åé€ãããªã¯ãšã¹ãã®åŠçãèš±å¯ããŸãã
- ãã±ããã空ã®å Žåãã¢ã«ãŽãªãºã ã¯ãªã¯ãšã¹ããæåŠãŸãã¯ãã¥ãŒã«å ¥ããŸãã
- ããŒã¯ã³ã¯ããã±ããã®æå€§å®¹éãŸã§ãäºåã«å®çŸ©ãããè£å ã¬ãŒãã§ãã±ããã«è¿œå ãããŸãã
ãªãããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ãéžã¶ã®ãïŒ
ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã¯ãåºå®ãŠã£ã³ããŠã«ãŠã³ã¿ãŒãã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠã«ãŠã³ã¿ãŒãªã©ãä»ã®ã¬ãŒãå¶éæè¡ã«æ¯ã¹ãŠããã€ãã®å©ç¹ããããŸãïŒ
- ããŒã¹ã容éïŒ ãã±ãããµã€ãºãŸã§ã®ãªã¯ãšã¹ãã®ããŒã¹ãã蚱容ããææãã©ãã£ãã¯ãæ¥å¢ãããããªæ£åœãªå©çšãã¿ãŒã³ã«å¯Ÿå¿ã§ããŸãã
- ã¹ã ãŒãºãªã¬ãŒãå¶éïŒ è£å ã¬ãŒãã«ãããå¹³åãªã¯ãšã¹ãã¬ãŒããå®çŸ©ãããå¶éå ã«åãŸãããšãä¿èšŒãããæç¶çãªéè² è·ãé²ããŸãã
- èšå®ã®æè»æ§ïŒ ãã±ãããµã€ãºãšè£å ã¬ãŒãã¯ãç°ãªãAPIããŠãŒã¶ãŒå±€ã«åãããŠã¬ãŒãå¶éã®æåã埮調æŽããããã«ç°¡åã«èª¿æŽã§ããŸãã
- ã·ã³ãã«ãïŒ ã¢ã«ãŽãªãºã ã¯æ¯èŒççè§£ããããå®è£ ã容æã§ãããããå€ãã®ã·ããªãªã§å®çšçãªéžæè¢ãšãªããŸãã
- æè»æ§ïŒ IPã¢ãã¬ã¹ããŠãŒã¶ãŒIDãAPIããŒããã®ä»ã®åºæºã«åºã¥ãã¬ãŒãå¶éãªã©ãæ§ã ãªãŠãŒã¹ã±ãŒã¹ã«é©å¿ã§ããŸãã
å®è£ ã®è©³çް
ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ãå®è£ ããã«ã¯ããã±ããã®ç¶æ ïŒçŸåšã®ããŒã¯ã³æ°ãšæçµæŽæ°ã¿ã€ã ã¹ã¿ã³ãïŒã管çããåä¿¡ãªã¯ãšã¹ããåŠçããããã®ããžãã¯ãé©çšããå¿ èŠããããŸãã以äžã«å®è£ æé ã®æŠå¿µçãªæŠèŠã瀺ããŸãïŒ
- åæåïŒ
- ãã±ããã衚ãããŒã¿æ§é ãäœæããŸããéåžžã以äžã®èŠçŽ ãå«ã¿ãŸãïŒ
- `tokens`ïŒ ãã±ããå ã®çŸåšã®ããŒã¯ã³æ°ïŒãã±ãããµã€ãºã§åæåïŒã
- `last_refill`ïŒ ãã±ãããæåŸã«è£å ããããšãã®ã¿ã€ã ã¹ã¿ã³ãã
- `bucket_size`ïŒ ãã±ãããä¿æã§ããããŒã¯ã³ã®æå€§æ°ã
- `refill_rate`ïŒ ãã±ããã«ããŒã¯ã³ã远å ãããã¬ãŒãïŒäŸïŒ1ç§ãããã®ããŒã¯ã³æ°ïŒã
- ãªã¯ãšã¹ãåŠçïŒ
- ãªã¯ãšã¹ããå°çããããã¯ã©ã€ã¢ã³ãã®ãã±ãããååŸããŸãïŒäŸïŒIPã¢ãã¬ã¹ãAPIããŒã«åºã¥ãïŒããã±ãããååšããªãå Žåã¯ãæ°ããäœæããŸãã
- ååã®è£å 以éã«ãã±ããã«è¿œå ããããŒã¯ã³æ°ãèšç®ããŸãïŒ
- `time_elapsed = current_time - last_refill`
- `tokens_to_add = time_elapsed * refill_rate`
- ãã±ãããæŽæ°ããŸãïŒ
- `tokens = min(bucket_size, tokens + tokens_to_add)`ïŒããŒã¯ã³æ°ããã±ãããµã€ãºãè¶ ããªãããã«ä¿èšŒïŒ
- `last_refill = current_time`
- ãªã¯ãšã¹ããåŠçããã®ã«ååãªããŒã¯ã³ããã±ããã«ããã確èªããŸãïŒ
- `tokens >= 1` ã®å ŽåïŒ
- ããŒã¯ã³æ°ããã¯ãªã¡ã³ãïŒ `tokens = tokens - 1`
- ãªã¯ãšã¹ãã®åŠçãèš±å¯ããŸãã
- ãã以å€ã®å ŽåïŒ`tokens < 1`ïŒïŒ
- ãªã¯ãšã¹ããæåŠãŸãã¯ãã¥ãŒã«å ¥ããŸãã
- ã¬ãŒãå¶éè¶ éãšã©ãŒãè¿ããŸãïŒäŸïŒHTTPã¹ããŒã¿ã¹ã³ãŒã 429 Too Many RequestsïŒã
- æŽæ°ããããã±ããã®ç¶æ ãæ°žç¶åããŸãïŒäŸïŒããŒã¿ããŒã¹ããã£ãã·ã¥ãžïŒã
å®è£ äŸïŒæŠå¿µïŒ
以äžã¯ãäž»èŠãªã¹ãããã説æããããã®ç°¡ç¥åãããæŠå¿µçãªäŸã§ãïŒç¹å®ã®èšèªã«äŸåããŸããïŒïŒ
class TokenBucket:
def __init__(self, bucket_size, refill_rate):
self.bucket_size = bucket_size
self.refill_rate = refill_rate # 1ç§ãããã®ããŒã¯ã³æ°
self.tokens = bucket_size
self.last_refill = time.time()
def consume(self, tokens_to_consume=1):
self._refill()
if self.tokens >= tokens_to_consume:
self.tokens -= tokens_to_consume
return True # ãªã¯ãšã¹ãèš±å¯
else:
return False # ãªã¯ãšã¹ãæåŠïŒã¬ãŒãå¶éè¶
éïŒ
def _refill(self):
now = time.time()
time_elapsed = now - self.last_refill
tokens_to_add = time_elapsed * self.refill_rate
self.tokens = min(self.bucket_size, self.tokens + tokens_to_add)
self.last_refill = now
# 䜿çšäŸïŒ
bucket = TokenBucket(bucket_size=10, refill_rate=2) # 容é10ã1ç§ããã2ããŒã¯ã³ã§è£å
ããããã±ãã
if bucket.consume():
# ãªã¯ãšã¹ããåŠç
print("Request allowed")
else:
# ã¬ãŒãå¶éè¶
é
print("Rate limit exceeded")
泚æïŒ ããã¯åºæ¬çãªäŸã§ããæ¬çªç°å¢ã«å¯Ÿå¿ããå®è£ ã«ã¯ã䞊è¡åŠçãæ°žç¶æ§ããšã©ãŒãã³ããªã³ã°ã®åŠçãå¿ èŠã§ãã
é©åãªãã©ã¡ãŒã¿ã®éžæïŒãã±ãããµã€ãºãšè£å ã¬ãŒã
ãã±ãããµã€ãºãšè£å ã¬ãŒãã«é©åãªå€ãéžæããããšã¯ã广çãªã¬ãŒãå¶éã«ãšã£ãŠéåžžã«éèŠã§ããæé©ãªå€ã¯ãç¹å®ã®APIããã®æå³ããããŠãŒã¹ã±ãŒã¹ãããã³æãŸããä¿è·ã¬ãã«ã«ãã£ãŠç°ãªããŸãã
- ãã±ãããµã€ãºïŒ ãã±ãããµã€ãºã倧ããã»ã©ããã倧ããªããŒã¹ã容éã蚱容ã§ããŸããããã¯ãææãã©ãã£ãã¯ãæ¥å¢ããAPIãããŠãŒã¶ãŒãæ£åœãªçç±ã§äžé£ã®ãªã¯ãšã¹ããè¿ éã«è¡ãå¿ èŠãããå Žåã«æçã§ãããããããã±ãããµã€ãºãéåžžã«å€§ãããšãé·æéã«ããã倧éã®å©çšã蚱容ããŠããŸããã¬ãŒãå¶éã®ç®çãæãªãå¯èœæ§ããããŸãããã±ãããµã€ãºã決å®ããéã«ã¯ããŠãŒã¶ãŒã®å žåçãªããŒã¹ããã¿ãŒã³ãèæ ®ããŠãã ãããäŸãã°ãåçç·šéAPIã§ã¯ããŠãŒã¶ãŒãç»åã®ããããè¿ éã«ã¢ããããŒãã§ããããã«ããã倧ããªãã±ãããå¿ èŠã«ãªããããããŸããã
- è£å ã¬ãŒãïŒ è£å ã¬ãŒãã¯ãèš±å¯ãããå¹³åãªã¯ãšã¹ãã¬ãŒããæ±ºå®ããŸããè£å ã¬ãŒããé«ãã»ã©ãåäœæéãããã«ããå€ãã®ãªã¯ãšã¹ããå¯èœã«ãªããäœãã»ã©å¶éãå³ãããªããŸããè£å ã¬ãŒãã¯ãAPIã®ãã£ãã·ãã£ãšãŠãŒã¶ãŒéã®å ¬å¹³æ§ã®ã¬ãã«ã«åºã¥ããŠéžæããå¿ èŠããããŸãããªãœãŒã¹ã倧éã«æ¶è²»ããAPIã®å Žåã¯ãè£å ã¬ãŒããäœãèšå®ããã®ãæãŸããã§ãããããŸããç°ãªããŠãŒã¶ãŒå±€ãèæ ®ããããšãéèŠã§ãããã¬ãã¢ã ãŠãŒã¶ãŒã¯ãç¡æãŠãŒã¶ãŒãããé«ãè£å ã¬ãŒããåŸããããããããŸããã
ã·ããªãªäŸïŒ
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã®å ¬éAPIïŒ ä¹±çšãé²ãããã¹ãŠã®ãŠãŒã¶ãŒã«å ¬æ£ãªã¢ã¯ã»ã¹ãä¿èšŒããããã«ãæ¯èŒçå°ããªãã±ãããµã€ãºïŒäŸïŒ10ïœ20ãªã¯ãšã¹ãïŒãšäžçšåºŠã®è£å ã¬ãŒãïŒäŸïŒ1ç§ããã2ïœ5ãªã¯ãšã¹ãïŒãé©åãããããŸããã
- ãã€ã¯ããµãŒãã¹ééä¿¡ã®ããã®å éšAPIïŒ å éšãããã¯ãŒã¯ãæ¯èŒçã«ä¿¡é Œæ§ãé«ãããã€ã¯ããµãŒãã¹ã«ååãªãã£ãã·ãã£ããããšä»®å®ããã°ããã倧ããªãã±ãããµã€ãºïŒäŸïŒ50ïœ100ãªã¯ãšã¹ãïŒãšé«ãè£å ã¬ãŒãïŒäŸïŒ1ç§ããã10ïœ20ãªã¯ãšã¹ãïŒãé©ããŠãããããããŸããã
- 決æžã²ãŒããŠã§ã€ã®APIïŒ äžæ£è¡çºããä¿è·ããäžæ£ãªååŒãé²ãããã«ãå°ããªãã±ãããµã€ãºïŒäŸïŒ5ïœ10ãªã¯ãšã¹ãïŒãšäœãè£å ã¬ãŒãïŒäŸïŒ1ç§ããã1ïœ2ãªã¯ãšã¹ãïŒãäžå¯æ¬ ã§ãã
å埩çã¢ãããŒãïŒ ãŸãã¯åŠ¥åœãªåæå€ã§ãã±ãããµã€ãºãšè£å ã¬ãŒããèšå®ãããã®åŸAPIã®ããã©ãŒãã³ã¹ãšå©çšãã¿ãŒã³ãç£èŠããŸããå®éã®ããŒã¿ãšãã£ãŒãããã¯ã«åºã¥ããŠãå¿ èŠã«å¿ããŠãã©ã¡ãŒã¿ã調æŽããŠãã ããã
ãã±ããã®ç¶æ ã®ä¿å
ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã§ã¯ãåãã±ããã®ç¶æ ïŒããŒã¯ã³æ°ãšæçµè£å ã¿ã€ã ã¹ã¿ã³ãïŒãæ°žç¶çã«ä¿åããå¿ èŠããããŸããé©åãªã¹ãã¬ãŒãžã¡ã«ããºã ãéžæããããšã¯ãããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã«ãšã£ãŠéåžžã«éèŠã§ãã
äžè¬çãªã¹ãã¬ãŒãžãªãã·ã§ã³ïŒ
- ã€ã³ã¡ã¢ãªãã£ãã·ã¥ïŒäŸïŒRedisãMemcachedïŒïŒ ããŒã¿ãã¡ã¢ãªã«ä¿åããããããæéã®ããã©ãŒãã³ã¹ãæäŸããŸããäœã¬ã€ãã³ã·ãéèŠãªé«ãã©ãã£ãã¯APIã«é©ããŠããŸãããã ãããã£ãã·ã¥ãµãŒããŒãåèµ·åãããšããŒã¿ã¯å€±ããããããã¬ããªã±ãŒã·ã§ã³ãæ°žç¶åã¡ã«ããºã ã®äœ¿çšãæ€èšããŠãã ããã
- ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ïŒäŸïŒPostgreSQLãMySQLïŒïŒ èä¹ æ§ãšäžè²«æ§ãæäŸããŸããããŒã¿ã®æŽåæ§ãæåªå ãããAPIã«é©ããŠããŸãããã ããããŒã¿ããŒã¹æäœã¯ã€ã³ã¡ã¢ãªãã£ãã·ã¥æäœãããé ããªãå¯èœæ§ããããããã¯ãšãªãæé©åããå¯èœãªéããã£ãã·ã¥å±€ã䜿çšããŠãã ããã
- NoSQLããŒã¿ããŒã¹ïŒäŸïŒCassandraãMongoDBïŒïŒ ã¹ã±ãŒã©ããªãã£ãšæè»æ§ãæäŸããŸããéåžžã«é«ããªã¯ãšã¹ãéã®APIããããŒã¿ã¹ããŒããé²åããAPIã«é©ããŠããŸãã
èæ ®äºé ïŒ
- ããã©ãŒãã³ã¹ïŒ æåŸ ãããèªã¿æžãã®è² è·ãäœã¬ã€ãã³ã·ã§åŠçã§ããã¹ãã¬ãŒãžã¡ã«ããºã ãéžæããŠãã ããã
- ã¹ã±ãŒã©ããªãã£ïŒ ã¹ãã¬ãŒãžã¡ã«ããºã ãå¢å ãããã©ãã£ãã¯ã«å¯Ÿå¿ããŠæ°Žå¹³ã«ã¹ã±ãŒã«ã§ããããšã確èªããŠãã ããã
- èä¹ æ§ïŒ åã¹ãã¬ãŒãžãªãã·ã§ã³ã«ãããããŒã¿æå€±ã®ãªã¹ã¯ãèæ ®ããŠãã ããã
- ã³ã¹ãïŒ ããŸããŸãªã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ã®ã³ã¹ããè©äŸ¡ããŠãã ããã
ã¬ãŒãå¶éè¶ éã€ãã³ãã®åŠç
ã¯ã©ã€ã¢ã³ããã¬ãŒãå¶éãè¶ éããå Žåããã®ã€ãã³ããé©åã«åŠçããæçãªãã£ãŒãããã¯ãæäŸããããšãéèŠã§ãã
ãã¹ããã©ã¯ãã£ã¹ïŒ
- HTTPã¹ããŒã¿ã¹ã³ãŒãïŒ æšæºçãªHTTPã¹ããŒã¿ã¹ã³ãŒãã§ãã 429 Too Many Requests ãè¿ããŸãã
- Retry-AfterããããŒïŒ ã¬ã¹ãã³ã¹ã« `Retry-After` ããããŒãå«ããã¯ã©ã€ã¢ã³ããæ¬¡ã®ãªã¯ãšã¹ããè¡ããŸã§ã«åŸ ã€ã¹ãç§æ°ã瀺ããŸããããã«ãããã¯ã©ã€ã¢ã³ããç¹°ãè¿ããªã¯ãšã¹ããéã£ãŠAPIã«éè² è·ããããã®ãé²ãããšãã§ããŸãã
- æçãªãšã©ãŒã¡ãã»ãŒãžïŒ ã¬ãŒãå¶éãè¶ éããããšãæç¢ºãã€ç°¡æœã«èª¬æããåé¡ã®è§£æ±ºæ¹æ³ïŒäŸïŒãªãã©ã€ããåã«åŸ ã€ïŒãææ¡ãããšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- ãã®ã³ã°ãšç£èŠïŒ ç£èŠãšåæã®ããã«ãã¬ãŒãå¶éè¶ éã€ãã³ãããã°ã«èšé²ããŸããããã«ãããæœåšçãªä¹±çšãèšå®ãã¹ã®ããã¯ã©ã€ã¢ã³ããç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
ã¬ã¹ãã³ã¹äŸïŒ
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60
{
"error": "ã¬ãŒãå¶éãè¶
éããŸããã60ç§åŸ
ã£ãŠããå詊è¡ããŠãã ããã"
}
é«åºŠãªèæ ®äºé
åºæ¬çãªå®è£ ãè¶ ããŠãAPIã¬ãŒãå¶éã®å¹æãšæè»æ§ãããã«é«ããããã®ããã€ãã®é«åºŠãªèæ ®äºé ããããŸãã
- éå±€åã¬ãŒãå¶éïŒ ç°ãªããŠãŒã¶ãŒå±€ïŒäŸïŒç¡æãåºæ¬ããã¬ãã¢ã ïŒã«å¯ŸããŠç°ãªãã¬ãŒãå¶éãå®è£ ããŸããããã«ããããµãã¹ã¯ãªãã·ã§ã³ãã©ã³ããã®ä»ã®åºæºã«åºã¥ããŠãããŸããŸãªã¬ãã«ã®ãµãŒãã¹ãæäŸã§ããŸããæ£ããã¬ãŒãå¶éãé©çšããããã«ããã±ãããšäžç·ã«ãŠãŒã¶ãŒå±€ã®æ å ±ãä¿åããŸãã
- åçã¬ãŒãå¶éïŒ ãªã¢ã«ã¿ã€ã ã®ã·ã¹ãã è² è·ããã®ä»ã®èŠå ã«åºã¥ããŠãã¬ãŒãå¶éãåçã«èª¿æŽããŸããäŸãã°ãããŒã¯æé垯ã«è£å ã¬ãŒããäžããŠéè² è·ãé²ãããšãã§ããŸããããã«ã¯ãã·ã¹ãã ããã©ãŒãã³ã¹ã®ç£èŠãšããã«å¿ããã¬ãŒãå¶éã®èª¿æŽãå¿ èŠã§ãã
- 忣ã¬ãŒãå¶éïŒ è€æ°ã®APIãµãŒããŒãæã€åæ£ç°å¢ã§ã¯ããã¹ãŠã®ãµãŒããŒã§äžè²«ããã¬ãŒãå¶éãä¿èšŒããããã«ã忣ã¬ãŒãå¶éãœãªã¥ãŒã·ã§ã³ãå®è£ ããŸããå ±æã¹ãã¬ãŒãžã¡ã«ããºã ïŒäŸïŒRedisã¯ã©ã¹ã¿ãŒïŒãšã³ã³ã·ã¹ãã³ãããã·ã³ã°ã䜿çšããŠããã±ããããµãŒããŒéã«åæ£ãããŸãã
- 詳现ãªã¬ãŒãå¶éïŒ è€éãããªãœãŒã¹æ¶è²»éã«åºã¥ããŠãç°ãªãAPIãšã³ããã€ã³ãããªãœãŒã¹ã«ç°ãªãã¬ãŒãå¶éãé©çšããŸããäŸãã°ãåçŽãªèªã¿åãå°çšãšã³ããã€ã³ãã¯ãè€éãªæžãèŸŒã¿æäœãããé«ãã¬ãŒãå¶éãæã€ãããããŸããã
- IPããŒã¹ vs. ãŠãŒã¶ãŒããŒã¹ã®ã¬ãŒãå¶éïŒ IPã¢ãã¬ã¹ã«åºã¥ãã¬ãŒãå¶éãšããŠãŒã¶ãŒIDãAPIããŒã«åºã¥ãã¬ãŒãå¶éã®ãã¬ãŒããªããèæ ®ããŸããIPããŒã¹ã®ã¬ãŒãå¶éã¯ãç¹å®ã®ãœãŒã¹ããã®æªæã®ãããã©ãã£ãã¯ããããã¯ããã®ã«å¹æçã§ãããIPã¢ãã¬ã¹ãå ±æããæ£åœãªãŠãŒã¶ãŒïŒäŸïŒNATã²ãŒããŠã§ã€ã®èåŸã«ãããŠãŒã¶ãŒïŒã«ã圱é¿ãäžããå¯èœæ§ããããŸãããŠãŒã¶ãŒããŒã¹ã®ã¬ãŒãå¶éã¯ãåã ã®ãŠãŒã¶ãŒã®å©çšç¶æ³ãããæ£ç¢ºã«å¶åŸ¡ã§ããŸããäž¡æ¹ã®çµã¿åãããæé©ã§ããå ŽåããããŸãã
- APIã²ãŒããŠã§ã€ãšã®çµ±åïŒ APIã²ãŒããŠã§ã€ïŒäŸïŒKongãTykãApigeeïŒã®ã¬ãŒãå¶éæ©èœã掻çšããŠãå®è£ ãšç®¡çãç°¡çŽ åããŸããAPIã²ãŒããŠã§ã€ã¯ãå€ãã®å Žåãçµã¿èŸŒã¿ã®ã¬ãŒãå¶éæ©èœãæäŸããäžå€®éæš©çãªã€ã³ã¿ãŒãã§ãŒã¹ãéããŠã¬ãŒãå¶éãèšå®ã§ããŸãã
ã¬ãŒãå¶éã«é¢ããã°ããŒãã«ãªèŠç¹
ã°ããŒãã«ãªãŠãŒã¶ãŒåãã«APIã¬ãŒãå¶éãèšèšã»å®è£ ããéã«ã¯ã次ã®ç¹ãèæ ®ããŠãã ããïŒ
- ã¿ã€ã ãŸãŒã³ïŒ è£å ééãèšå®ããéã«ã¯ãç°ãªãã¿ã€ã ãŸãŒã³ã«æ³šæããŠãã ãããäžè²«æ§ãä¿ã€ããã«UTCã¿ã€ã ã¹ã¿ã³ãã䜿çšããããšãæ€èšããŸãã
- ãããã¯ãŒã¯ã¬ã€ãã³ã·ïŒ ãããã¯ãŒã¯ã¬ã€ãã³ã·ã¯å°åã«ãã£ãŠå€§ããç°ãªãå ŽåããããŸããé éå°ã®ãŠãŒã¶ãŒãæå³ããäžå©ã«ããªãããã«ãã¬ãŒãå¶éãèšå®ããéã«ã¯æœåšçãªã¬ã€ãã³ã·ãèæ ®ã«å ¥ããŠãã ããã
- å°åã®èŠå¶ïŒ APIã®å©çšã«åœ±é¿ãäžããå¯èœæ§ã®ããå°åã®èŠå¶ãã³ã³ãã©ã€ã¢ã³ã¹èŠä»¶ã«æ³šæããŠãã ãããäŸãã°ãäžéšã®å°åã§ã¯ãåéãŸãã¯åŠçã§ããããŒã¿éãå¶éããããŒã¿ãã©ã€ãã·ãŒæ³ãååšããå ŽåããããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒïŒ CDNãå©çšããŠAPIã³ã³ãã³ããé ä¿¡ããç°ãªãå°åã®ãŠãŒã¶ãŒã«å¯Ÿããã¬ã€ãã³ã·ãåæžããŸãã
- èšèªãšããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒ ã°ããŒãã«ãªãŠãŒã¶ãŒã«å¯Ÿå¿ããããã«ããšã©ãŒã¡ãã»ãŒãžãããã¥ã¡ã³ããè€æ°ã®èšèªã§æäŸããŸãã
çµè«
APIã¬ãŒãå¶éã¯ãAPIãä¹±çšããä¿è·ãããã®å®å®æ§ãšå¯çšæ§ã確ä¿ããããã«äžå¯æ¬ ãªãã©ã¯ãã£ã¹ã§ããããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã¯ãããŸããŸãªã·ããªãªã§ã¬ãŒãå¶éãå®è£ ããããã®æè»ãã€å¹æçãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã±ãããµã€ãºãšè£å ã¬ãŒããæ éã«éžæãããã±ããã®ç¶æ ãå¹ççã«ä¿åããã¬ãŒãå¶éè¶ éã€ãã³ããé©åã«åŠçããããšã§ãAPIãä¿è·ããã°ããŒãã«ãªãŠãŒã¶ãŒã«è¯å¥œãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããå ç¢ã§ã¹ã±ãŒã©ãã«ãªã¬ãŒãå¶éã·ã¹ãã ãæ§ç¯ã§ããŸããAPIã®å©çšç¶æ³ãç¶ç¶çã«ç£èŠããå€åãããã©ãã£ãã¯ãã¿ãŒã³ãã»ãã¥ãªãã£ã®è åšã«é©å¿ããããã«ãå¿ èŠã«å¿ããŠã¬ãŒãå¶éãã©ã¡ãŒã¿ã調æŽããããšãå¿ããªãã§ãã ããã
ããŒã¯ã³ãã±ããã¢ã«ãŽãªãºã ã®ååãšå®è£ ã®è©³çްãçè§£ããããšã§ãAPIã广çã«ä¿è·ããäžçäžã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããä¿¡é Œæ§ãšã¹ã±ãŒã©ããªãã£ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãã§ããŸãã