* Update all * ðš Auto format * Add missing * ðš Auto format --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
20 KiB
ã¬ã¹ãã³ã¹ã¢ãã« - æ»ãå€ã®å
path operation 颿°ã®æ»ãå€ã®åã«ã¢ãããŒã·ã§ã³ãä»ããããšã§ãã¬ã¹ãã³ã¹ã«äœ¿çšãããåã宣èšã§ããŸãã
颿°ãã©ã¡ãŒã¿ã®å ¥åããŒã¿ãšåãããã« åã¢ãããŒã·ã§ã³ ã䜿çšã§ããŸããPydanticã¢ãã«ããªã¹ããèŸæžãæŽæ°ãçåœå€ãªã©ã®ã¹ã«ã©ãŒå€ã䜿çšã§ããŸãã
{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
FastAPIã¯ãã®æ»ãå€ã®åã䜿ã£ãŠä»¥äžãè¡ããŸã:
- è¿åŽããŒã¿ãæ€èšŒããŸãã
- ããŒã¿ãäžæ£ïŒäŸ: ãã£ãŒã«ããæ¬ ããŠããïŒã§ããã°ãããã¯ããªãã®ã¢ããªã³ãŒããå£ããŠããŠãè¿ãã¹ããã®ãè¿ããŠããªãããšãæå³ããäžæ£ãªããŒã¿ãè¿ã代ããã«ãµãŒããŒãšã©ãŒãè¿ããŸããããã«ãããããªããšã¯ã©ã€ã¢ã³ãã¯ãæåŸ ãããããŒã¿ãšããŒã¿åœ¢ç¶ãåãåããããšã確å®ã«ã§ããŸãã
- OpenAPIã® path operation ã«ãã¬ã¹ãã³ã¹çšã® JSON Schema ã远å ããŸãã
- ããã¯èªåããã¥ã¡ã³ãã§äœ¿çšãããŸãã
- èªåã¯ã©ã€ã¢ã³ãã³ãŒãçæããŒã«ã§ã䜿çšãããŸãã
ããããæãéèŠãªã®ã¯:
- æ»ãå€ã®åã§å®çŸ©ãããå
容ã«åãããŠãåºåããŒã¿ãå¶éããã£ã«ã¿ãªã³ã°ããŸãã
- ããã¯ã»ãã¥ãªãã£ã®èгç¹ã§ç¹ã«éèŠã§ãã以äžã§è©³ããèŠãŠãããŸãã
response_modelãã©ã¡ãŒã¿
åã宣èšããŠããå 容ãšãŸã£ããåãã§ã¯ãªãããŒã¿ãè¿ãå¿ èŠãããããŸãã¯ãããããã±ãŒã¹ããããŸãã
äŸãã°ãèŸæžãè¿ãããŸãã¯ããŒã¿ããŒã¹ãªããžã§ã¯ããè¿ãããããPydanticã¢ãã«ãšããŠå®£èšãããå ŽåããããŸããããããããšã§ãPydanticã¢ãã«ãè¿ãããªããžã§ã¯ãïŒäŸ: èŸæžãããŒã¿ããŒã¹ãªããžã§ã¯ãïŒã®ããã¥ã¡ã³ãåãããªããŒã·ã§ã³ãªã©ããã¹ãŠè¡ã£ãŠãããŸãã
æ»ãå€ã®åã¢ãããŒã·ã§ã³ã远å ãããšãããŒã«ããšãã£ã¿ãïŒæ£ããïŒãšã©ãŒãšããŠã颿°ã宣èšããåïŒäŸ: Pydanticã¢ãã«ïŒãšã¯ç°ãªãåïŒäŸ: dictïŒãè¿ããŠãããšèŠåããŸãã
ãã®ãããªå Žåãæ»ãå€ã®åã®ä»£ããã«ãpath operation ãã³ã¬ãŒã¿ã®ãã©ã¡ãŒã¿ response_model ã䜿çšã§ããŸãã
response_modelãã©ã¡ãŒã¿ã¯ããããã® path operation ã§ã䜿çšã§ããŸã:
@app.get()@app.post()@app.put()@app.delete()- ãªã©ã
{* ../../docs_src/response_model/tutorial001_py310.py hl[17,22,24:27] *}
/// note | åè
response_modelã¯ããã³ã¬ãŒã¿ãã¡ãœããïŒgetãpostãªã©ïŒã®ãã©ã¡ãŒã¿ã§ãã颿°ã®ãã©ã¡ãŒã¿ãããã£ãªã©ãšã¯éããpath operation 颿°ã®ãã©ã¡ãŒã¿ã§ã¯ãããŸããã
///
response_modelã¯ãPydanticã¢ãã«ã®ãã£ãŒã«ãã§å®£èšããã®ãšåãåãåãåããŸãããã®ãããPydanticã¢ãã«ã«ãã§ããŸãããäŸãã° List[Item] ã®ããã«ãPydanticã¢ãã«ã® list ã«ãã§ããŸãã
FastAPIã¯ãã® response_model ã䜿ã£ãŠãããŒã¿ã®ããã¥ã¡ã³ãåãæ€èšŒãªã©ãè¡ããããã«åºåããŒã¿ãå宣èšã«åãããŠå€æã»ãã£ã«ã¿ãªã³ã°ããŸãã
/// tip | è±ç¥è
ãšãã£ã¿ãmypyãªã©ã§å³å¯ãªåãã§ãã¯ãããŠããå Žåã颿°ã®æ»ãå€ã®åã Any ãšããŠå®£èšã§ããŸãã
ãããããšãæå³çã«äœã§ãè¿ããŠããããšããšãã£ã¿ã«äŒããããŸããããã§ãFastAPI㯠response_model ã䜿ã£ãŠãããŒã¿ã®ããã¥ã¡ã³ãåãæ€èšŒããã£ã«ã¿ãªã³ã°ãªã©ãè¡ããŸãã
///
response_modelã®åªå
é äœ
æ»ãå€ã®åãš response_model ã®äž¡æ¹ã宣èšããå Žåãresponse_model ãåªå
ãããFastAPIã§äœ¿çšãããŸãã
ããã«ãããã¬ã¹ãã³ã¹ã¢ãã«ãšã¯ç°ãªãåãè¿ããŠããå Žåã§ãããšãã£ã¿ãmypyãªã©ã®ããŒã«ã§äœ¿çšããããã«é¢æ°ãžæ£ããåã¢ãããŒã·ã§ã³ã远å ã§ããŸããããã§ãFastAPI㯠response_model ã䜿çšããŠããŒã¿ã®æ€èšŒãããã¥ã¡ã³ãåãªã©ãå®è¡ã§ããŸãã
ãŸã response_model=None ã䜿çšããŠããã®path operationã®ã¬ã¹ãã³ã¹ã¢ãã«çæãç¡å¹åããããšãã§ããŸããããã¯ãPydanticã®ãã£ãŒã«ããšããŠæå¹ã§ã¯ãªããã®ã«å¯ŸããŠåã¢ãããŒã·ã§ã³ã远å ããå Žåã«å¿
èŠã«ãªãããšããããŸãã以äžã®ã»ã¯ã·ã§ã³ã®ããããã§äŸã瀺ããŸãã
åãå ¥åããŒã¿ã®è¿åŽ
ããã§ã¯ UserIn ã¢ãã«ã宣èšããŠããŸããããã«ã¯å¹³æã®ãã¹ã¯ãŒããå«ãŸããŸã:
{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
/// info | æ å ±
EmailStr ã䜿çšããã«ã¯ãæåã« email-validator ãã€ã³ã¹ããŒã«ããŠãã ããã
ä»®æ³ç°å¢{.internal-link target=_blank}ãäœæããŠæå¹åããŠãããäŸãã°æ¬¡ã®ããã«ã€ã³ã¹ããŒã«ããŠãã ãã:
$ pip install email-validator
ãŸãã¯æ¬¡ã®ããã«ããŸã:
$ pip install "pydantic[email]"
///
ãããŠããã®ã¢ãã«ã䜿çšããŠå ¥åã宣èšããåãã¢ãã«ã䜿ã£ãŠåºåã宣èšããŠããŸã:
{* ../../docs_src/response_model/tutorial002_py310.py hl[16] *}
ããã§ããã©ãŠã¶ããã¹ã¯ãŒãã䜿ã£ãŠãŠãŒã¶ãŒãäœæããéã«ãAPIãã¬ã¹ãã³ã¹ã§åããã¹ã¯ãŒããè¿ãããã«ãªããŸããã
ãã®å ŽåãåããŠãŒã¶ãŒããã¹ã¯ãŒããéä¿¡ããŠããã®ã§åé¡ãªããããããŸããã
ããããåãã¢ãã«ãå¥ã®path operationã«äœ¿çšãããšããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«ãŠãŒã¶ãŒã®ãã¹ã¯ãŒããéä¿¡ããŠããŸãå¯èœæ§ããããŸãã
/// danger | èŠå
ãã¹ãŠã®æ³šæç¹ãçè§£ããŠããŠãèªåãäœãããŠãããåãã£ãŠããå Žåãé€ãããŠãŒã¶ãŒã®å¹³æã®ãã¹ã¯ãŒããä¿åãããããã®ããã«ã¬ã¹ãã³ã¹ã§éä¿¡ãããããªãã§ãã ããã
///
åºåã¢ãã«ã®è¿œå
代ããã«ãå¹³æã®ãã¹ã¯ãŒããæã€å ¥åã¢ãã«ãšããã¹ã¯ãŒããæããªãåºåã¢ãã«ãäœæã§ããŸã:
{* ../../docs_src/response_model/tutorial003_py310.py hl[9,11,16] *}
ããã§ã¯ãpath operation 颿°ããã¹ã¯ãŒããå«ãåãå ¥åãŠãŒã¶ãŒãè¿ããŠããã«ãããããã:
{* ../../docs_src/response_model/tutorial003_py310.py hl[24] *}
...response_modelãããã¹ã¯ãŒããå«ãŸãªã UserOut ã¢ãã«ãšããŠå®£èšããŸãã:
{* ../../docs_src/response_model/tutorial003_py310.py hl[22] *}
ãã®ãããFastAPI ã¯åºåã¢ãã«ã§å®£èšãããŠããªããã¹ãŠã®ããŒã¿ããã£ã«ã¿ãªã³ã°ããŠãããŸãïŒPydanticã䜿çšïŒã
response_modelãŸãã¯æ»ãå€ã®å
ãã®ã±ãŒã¹ã§ã¯2ã€ã®ã¢ãã«ãç°ãªãããã颿°ã®æ»ãå€ã®åã UserOut ãšããŠã¢ãããŒã·ã§ã³ãããšããšãã£ã¿ãããŒã«ã¯ãç°ãªãã¯ã©ã¹ãªã®ã§äžæ£ãªåãè¿ããŠãããšèŠåããŸãã
ãã®ããããã®äŸã§ã¯ response_model ãã©ã¡ãŒã¿ã§å®£èšããå¿
èŠããããŸãã
...ããããããã解決ããæ¹æ³ã以äžã§ç¢ºèªããŸãããã
æ»ãå€ã®åãšããŒã¿ãã£ã«ã¿ãªã³ã°
åã®äŸããç¶ããŸãã颿°ã«1ã€ã®åãã¢ãããŒã·ã§ã³ãããäžæ¹ã§ã颿°ããã¯å®éã«ã¯ããå€ãã®ããŒã¿ãå«ããã®ãè¿ããããã«ããããšããŸãã
FastAPIã«ã¯ã¬ã¹ãã³ã¹ã¢ãã«ã䜿çšããŠããŒã¿ããã£ã«ã¿ãªã³ã°ãç¶ããŠã»ããã§ããã€ãŸãã颿°ãããå€ãã®ããŒã¿ãè¿ããŠããã¬ã¹ãã³ã¹ã«ã¯ã¬ã¹ãã³ã¹ã¢ãã«ã§å®£èšããããã£ãŒã«ãã®ã¿ãå«ãŸããŸãã
åã®äŸã§ã¯ã¯ã©ã¹ãç°ãªããã response_model ãã©ã¡ãŒã¿ã䜿ãå¿
èŠããããŸããããããããã¯ããšãã£ã¿ãããŒã«ã«ãã颿°ã®æ»ãå€ã®åãã§ãã¯ã®ãµããŒããåããããªãããšãæå³ããŸãã
ãããããã®ãããªããšãå¿ èŠã«ãªãå€ãã®ã±ãŒã¹ã§ã¯ããã®äŸã®ããã«ã¢ãã«ã§ããŒã¿ã®äžéšããã£ã«ã¿/åé€ãããã ãã§ãã
ãã®ãããªå Žåãã¯ã©ã¹ãšç¶æ¿ãå©çšããŠé¢æ°ã®åã¢ãããŒã·ã§ã³ã掻çšãããšãã£ã¿ãããŒã«ã®ãµããŒããæ¹åãã€ã€ãFastAPIã®ããŒã¿ãã£ã«ã¿ãªã³ã°ãåŸãããŸãã
{* ../../docs_src/response_model/tutorial003_01_py310.py hl[7:10,13:14,18] *}
ããã«ããããã®ã³ãŒãã¯åãšããŠæ£ãããããšãã£ã¿ãmypyããã®ããŒã«æ¯æŽãåŸãããŸãããFastAPIã«ããããŒã¿ãã£ã«ã¿ãªã³ã°ãåŸãããŸãã
ããã¯ã©ã®ããã«åäœããã®ã§ããããïŒç¢ºèªããŠã¿ãŸããããð€
åã¢ãããŒã·ã§ã³ãšããŒã«æ¯æŽ
ãŸãããšãã£ã¿ãmypyããã®ä»ã®ããŒã«ããããã©ãèŠãããèŠãŠã¿ãŸãã
BaseUser ã«ã¯åºæ¬ãã£ãŒã«ãããããŸããæ¬¡ã« UserIn ã BaseUser ãç¶æ¿ã㊠password ãã£ãŒã«ãã远å ãããããäž¡æ¹ã®ã¢ãã«ã®ãã£ãŒã«ãããã¹ãŠå«ãŸããŸãã
颿°ã®æ»ãå€ã®åã BaseUser ãšããŠã¢ãããŒã·ã§ã³ããŸãããå®éã«ã¯ UserIn ã€ã³ã¹ã¿ã³ã¹ãè¿ããŠããŸãã
ãšãã£ã¿ãmypyãªã©ã®ããŒã«ã¯ããã«æå¥ãèšããŸãããtypingã®èгç¹ã§ã¯ãUserIn 㯠BaseUser ã®ãµãã¯ã©ã¹ã§ãããæåŸ
ããããã®ã BaseUser ã§ããã° UserIn ã¯æå¹ãªåã ããã§ãã
FastAPIã®ããŒã¿ãã£ã«ã¿ãªã³ã°
äžæ¹FastAPIã§ã¯ãæ»ãå€ã®åãèŠãŠãè¿ãå 容ã«ãã®åã§å®£èšããããã£ãŒã«ãã ããå«ãŸããããšã確èªããŸãã
FastAPIã¯ãè¿åŽããŒã¿ã®ãã£ã«ã¿ãªã³ã°ã«ã¯ã©ã¹ç¶æ¿ã®åãã«ãŒã«ã䜿ãããŠããŸããªãããã«ãããããå éšã§Pydanticã䜿ã£ãŠããã€ãã®åŠçãè¡ã£ãŠããŸããããã§ãªããšãæåŸ 以äžã«å€ãã®ããŒã¿ãè¿ããŠããŸãå¯èœæ§ããããŸãã
ãã®æ¹æ³ã§ãããŒã«æ¯æŽä»ãã®åã¢ãããŒã·ã§ã³ãšããŒã¿ãã£ã«ã¿ãªã³ã°ã®äž¡æ¹ãšããããããšãåããã§ããŸãã
ããã¥ã¡ã³ããèŠã
èªåããã¥ã¡ã³ããèŠããšãå ¥åã¢ãã«ãšåºåã¢ãã«ãããããç¬èªã®JSON Schemaãæã£ãŠããããšã確èªã§ããŸã:
ãããŠãäž¡æ¹ã®ã¢ãã«ã¯å¯Ÿè©±åã®APIããã¥ã¡ã³ãã«äœ¿çšãããŸã:
ãã®ä»ã®æ»ãå€ã®åã¢ãããŒã·ã§ã³
Pydanticãã£ãŒã«ããšããŠæå¹ã§ã¯ãªããã®ãè¿ããããŒã«ïŒãšãã£ã¿ãmypyãªã©ïŒãæäŸãããµããŒããåŸãããã ãã«ã颿°ã§ãããã¢ãããŒã·ã§ã³ããã±ãŒã¹ããããããããŸããã
ã¬ã¹ãã³ã¹ãçŽæ¥è¿ã
æãäžè¬çãªã±ãŒã¹ã¯ãé«åºŠãªããã¥ã¡ã³ãã§åŸè¿°ãããResponseãçŽæ¥è¿ãã{.internal-link target=_blank}å Žåã§ãã
{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
ãã®ã·ã³ãã«ãªã±ãŒã¹ã¯ãæ»ãå€ã®åã¢ãããŒã·ã§ã³ã Response ã®ã¯ã©ã¹ïŒãŸãã¯ãµãã¯ã©ã¹ïŒã§ãããããFastAPIãèªåçã«åŠçããŸãã
ãŸã RedirectResponse ãš JSONResponse ã®äž¡æ¹ã¯ Response ã®ãµãã¯ã©ã¹ãªã®ã§ãããŒã«ãåã¢ãããŒã·ã§ã³ãæ£ãããšããŠåé¡ã«ããŸããã
Responseã®ãµãã¯ã©ã¹ãã¢ãããŒã·ã§ã³ãã
åã¢ãããŒã·ã§ã³ã§ Response ã®ãµãã¯ã©ã¹ã䜿ãããšãã§ããŸã:
{* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *}
ãã㯠RedirectResponse ã Response ã®ãµãã¯ã©ã¹ã§ãããFastAPIããã®ã·ã³ãã«ãªã±ãŒã¹ãèªååŠçãããããåæ§ã«åäœããŸãã
ç¡å¹ãªæ»ãå€ã®åã¢ãããŒã·ã§ã³
ããããPydanticåãšããŠæå¹ã§ã¯ãªãå¥ã®ä»»æã®ãªããžã§ã¯ãïŒäŸ: ããŒã¿ããŒã¹ãªããžã§ã¯ãïŒãè¿ãã颿°ã§ãã®ããã«ã¢ãããŒã·ã§ã³ãããšãFastAPIã¯ãã®åã¢ãããŒã·ã§ã³ããPydanticã¬ã¹ãã³ã¹ã¢ãã«ãäœæããããšããŠå€±æããŸãã
åæ§ã«ããŠããªã³ã®ããã«ãè€æ°ã®åã®ãã¡1ã€ä»¥äžãPydanticåãšããŠæå¹ã§ãªããã®ãå«ãå Žåãèµ·ãããŸããäŸãã°æ¬¡ã¯å€±æããŸã ð¥:
{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
...ããã¯ãåã¢ãããŒã·ã§ã³ãPydanticåã§ã¯ãªããåäžã® Response ã¯ã©ã¹ïŒãŸãã¯ãµãã¯ã©ã¹ïŒã§ããªãããã«å€±æããŸããResponse ãš dict ã®éã®unionïŒã©ã¡ããïŒã«ãªã£ãŠããããã§ãã
ã¬ã¹ãã³ã¹ã¢ãã«ãç¡å¹åãã
äžã®äŸãç¶ãããšãFastAPIãå®è¡ããããã©ã«ãã®ããŒã¿æ€èšŒãããã¥ã¡ã³ãåããã£ã«ã¿ãªã³ã°ãªã©ãè¡ããããªãããšãããã§ãããã
ãããããšãã£ã¿ãåãã§ãã«ãŒïŒäŸ: mypyïŒãªã©ã®ããŒã«æ¯æŽãåŸãããã«ã颿°ã®æ»ãå€ã®åã¢ãããŒã·ã§ã³ã¯æ®ããããããããŸããã
ãã®å Žåãresponse_model=None ãèšå®ããããšã§ã¬ã¹ãã³ã¹ã¢ãã«ã®çæãç¡å¹ã«ã§ããŸã:
{* ../../docs_src/response_model/tutorial003_05_py310.py hl[7] *}
ããã«ããFastAPIã¯ã¬ã¹ãã³ã¹ã¢ãã«çæãã¹ãããããFastAPIã¢ããªã±ãŒã·ã§ã³ã«åœ±é¿ãããã«å¿ èŠãªæ»ãå€ã®åã¢ãããŒã·ã§ã³ãä»ããããŸããð€
ã¬ã¹ãã³ã¹ã¢ãã«ã®ãšã³ã³ãŒãã£ã³ã°ãã©ã¡ãŒã¿
ã¬ã¹ãã³ã¹ã¢ãã«ã«ã¯æ¬¡ã®ããã«ããã©ã«ãå€ãèšå®ã§ããŸã:
{* ../../docs_src/response_model/tutorial004_py310.py hl[9,11:12] *}
description: Union[str, None] = NoneïŒãŸãã¯Python 3.10ã§ã¯str | None = NoneïŒã¯ããã©ã«ããNoneã§ããtax: float = 10.5ã¯ããã©ã«ãã10.5ã§ããtags: List[str] = []ã¯ããã©ã«ãã空ã®ãªã¹ã[]ã§ãã
ãã ããããããå®éã«ã¯ä¿åãããŠããªãå Žåãçµæããçç¥ãããããšããããŸãã
äŸãã°ãNoSQLããŒã¿ããŒã¹ã«å€ãã®ãªãã·ã§ã³å±æ§ãæã€ã¢ãã«ãããããããã©ã«ãå€ã§ãã£ã±ãã®éåžžã«é·ãJSONã¬ã¹ãã³ã¹ãéä¿¡ããããªãå Žåã§ãã
response_model_exclude_unsetãã©ã¡ãŒã¿ã®äœ¿çš
path operation ãã³ã¬ãŒã¿ã®ãã©ã¡ãŒã¿ response_model_exclude_unset=True ãèšå®ã§ããŸã:
{* ../../docs_src/response_model/tutorial004_py310.py hl[22] *}
ãããããšãããã©ã«ãå€ã¯ã¬ã¹ãã³ã¹ã«å«ãŸãããå®éã«èšå®ãããå€ã®ã¿ãå«ãŸããŸãã
ãã®ãããID foo ã®itemã«å¯ŸããŠãã® path operation ãžãªã¯ãšã¹ããéããšãã¬ã¹ãã³ã¹ã¯ä»¥äžã®ããã«ãªããŸãïŒããã©ã«ãå€ãå«ãŸãªãïŒ:
{
"name": "Foo",
"price": 50.2
}
/// info | æ å ±
以äžã䜿çšã§ããŸã:
response_model_exclude_defaults=Trueresponse_model_exclude_none=True
exclude_defaults ãš exclude_none ã«ã€ããŠã¯ãPydanticã®ããã¥ã¡ã³ãã§èª¬æãããŠããéãã§ãã
///
ããã©ã«ãå€ãæã€ãã£ãŒã«ãã«å€ãããããŒã¿
ããããID bar ã®itemã®ããã«ãããã©ã«ãå€ãèšå®ãããŠããã¢ãã«ã®ãã£ãŒã«ãã«å€ãèšå®ãããŠããå Žå:
{
"name": "Bar",
"description": "The bartenders",
"price": 62,
"tax": 20.2
}
ãããã¯ã¬ã¹ãã³ã¹ã«å«ãŸããŸãã
ããã©ã«ãå€ãšåãå€ãæã€ããŒã¿
ID baz ã®itemã®ããã«ããã©ã«ãå€ãšåãå€ãæã€ããŒã¿ã®å Žå:
{
"name": "Baz",
"description": None,
"price": 50.2,
"tax": 10.5,
"tags": []
}
FastAPIã¯ååã«è³¢ãã®ã§ïŒå®éã«ã¯ãPydanticãååã«è³¢ãïŒãdescription ã taxãtags ãããã©ã«ãå€ãšåãå€ã§ãã£ãŠããæç€ºçã«èšå®ãããïŒããã©ã«ãããååŸãããã®ã§ã¯ãªãïŒããšãçè§£ããŸãã
ãã®ããããããã¯JSONã¬ã¹ãã³ã¹ã«å«ãŸããŸãã
/// tip | è±ç¥è
ããã©ã«ãå€ã¯ None ã ãã§ã¯ãªãããšã«æ³šæããŠãã ããã
ãªã¹ãïŒ[]ïŒã 10.5 ã® float ãªã©ã§ãæ§ããŸããã
///
response_model_includeãšresponse_model_exclude
path operation ãã³ã¬ãŒã¿ã®ãã©ã¡ãŒã¿ response_model_include ãš response_model_exclude ã䜿çšã§ããŸãã
ãããã¯ãå«ããïŒæ®ããçç¥ããïŒãŸãã¯é€å€ããïŒæ®ããå«ãïŒå±æ§åãæã€ str ã® set ãåãåããŸãã
ããã¯ãPydanticã¢ãã«ã1ã€ãããªããåºåããããã€ãã®ããŒã¿ãåé€ãããå Žåã®ã¯ã€ãã¯ã·ã§ãŒãã«ãããšããŠäœ¿çšã§ããŸãã
/// tip | è±ç¥è
ããã§ãããããã®ãã©ã¡ãŒã¿ã§ã¯ãªããäžã§ç€ºããã¢ã€ãã¢ã®ããã«è€æ°ã®ã¯ã©ã¹ã䜿ãããšãæšå¥šãããŸãã
ããã¯ãresponse_model_include ã response_model_exclude ã䜿ã£ãŠããã€ãã®å±æ§ãçç¥ããŠããã¢ããªã®OpenAPIïŒãšããã¥ã¡ã³ãïŒã§çæãããJSON Schemaãå®å
šãªã¢ãã«ã®ãŸãŸã«ãªãããã§ãã
åæ§ã«åäœãã response_model_by_alias ã«ãåœãŠã¯ãŸããŸãã
///
{* ../../docs_src/response_model/tutorial005_py310.py hl[29,35] *}
/// tip | è±ç¥è
{"name", "description"} ã®æ§æã¯ãããã2ã€ã®å€ãæã€ set ãäœæããŸãã
ãã㯠set(["name", "description"]) ãšåçã§ãã
///
setã®ä»£ããã«listã䜿çšãã
ãã set ã䜿çšããããšãå¿ããŠã代ããã« list ã tuple ã䜿çšããŠããFastAPIã¯ããã set ã«å€æããŠæ£ããåäœããŸã:
{* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *}
ãŸãšã
path operation ãã³ã¬ãŒã¿ã®ãã©ã¡ãŒã¿ response_model ã䜿çšããŠã¬ã¹ãã³ã¹ã¢ãã«ãå®çŸ©ãããšãã«ãã©ã€ããŒãããŒã¿ããã£ã«ã¿ãªã³ã°ãããããšãä¿èšŒããŸãã
æç€ºçã«èšå®ãããå€ã®ã¿ãè¿ãã«ã¯ãresponse_model_exclude_unset ã䜿çšããŸãã