# ๐Ÿ—ƒ & ๐Ÿฉบ ๐Ÿ“› ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ›ƒ ๐Ÿ“š ๐Ÿ—ƒ ๐Ÿ“ณ ๐Ÿ‘† **FastAPI** ๐Ÿˆธ. ## ๐Ÿ—ƒ ๐Ÿ› ๏ธ ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ“„ ๐Ÿ‘ ๐Ÿ‘ˆ โš™๏ธ ๐Ÿ—„ ๐Ÿ”ง & ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ โšœ: | ๐Ÿ”ข | ๐Ÿ†Ž | ๐Ÿ“› | |------------|------|-------------| | `title` | `str` | ๐Ÿ“› ๐Ÿ› ๏ธ. | | `description` | `str` | ๐Ÿ“ ๐Ÿ“› ๐Ÿ› ๏ธ. โšซ๏ธ ๐Ÿ’ช โš™๏ธ โœ. | | `version` | `string` | โฌ ๐Ÿ› ๏ธ. ๐Ÿ‘‰ โฌ ๐Ÿ‘† ๐Ÿ‘ ๐Ÿˆธ, ๐Ÿšซ ๐Ÿ—„. ๐Ÿ–ผ `2.5.0`. | | `terms_of_service` | `str` | ๐Ÿ“› โš– ๐Ÿ•โ€๐Ÿฆบ ๐Ÿ› ๏ธ. ๐Ÿšฅ ๐Ÿšš, ๐Ÿ‘‰ โœ”๏ธ ๐Ÿ“›. | | `contact` | `dict` | ๐Ÿ“ง โ„น ๐ŸŽฆ ๐Ÿ› ๏ธ. โšซ๏ธ ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ“š ๐Ÿ‘.
contact ๐Ÿ‘
๐Ÿ”ข๐Ÿ†Ž๐Ÿ“›
namestrโš– ๐Ÿ“› ๐Ÿ“ง ๐Ÿ‘จโ€๐Ÿ’ผ/๐Ÿข.
urlstr๐Ÿ“› โ˜ ๐Ÿ“ง โ„น. ๐Ÿ”œ ๐Ÿ“ ๐Ÿ“›.
emailstr๐Ÿ“ง ๐Ÿ“ข ๐Ÿ“ง ๐Ÿ‘จโ€๐Ÿ’ผ/๐Ÿข. ๐Ÿ”œ ๐Ÿ“ ๐Ÿ“ง ๐Ÿ“ข.
| | `license_info` | `dict` | ๐Ÿ›‚ โ„น ๐ŸŽฆ ๐Ÿ› ๏ธ. โšซ๏ธ ๐Ÿ’ช ๐Ÿ”Œ ๐Ÿ“š ๐Ÿ‘.
license_info ๐Ÿ‘
๐Ÿ”ข๐Ÿ†Ž๐Ÿ“›
namestr๐Ÿšš (๐Ÿšฅ license_info โš’). ๐Ÿ›‚ ๐Ÿ“› โš™๏ธ ๐Ÿ› ๏ธ.
urlstr๐Ÿ“› ๐Ÿ›‚ โš™๏ธ ๐Ÿ› ๏ธ. ๐Ÿ”œ ๐Ÿ“ ๐Ÿ“›.
| ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿ‘ซ โฉ: {* ../../docs_src/metadata/tutorial001.py hl[3:16,19:31] *} /// tip ๐Ÿ‘† ๐Ÿ’ช โœ โœ `description` ๐Ÿ‘ & โšซ๏ธ ๐Ÿ”œ โœ ๐Ÿ”ข. /// โฎ๏ธ ๐Ÿ‘‰ ๐Ÿ“ณ, ๐Ÿง ๐Ÿ› ๏ธ ๐Ÿฉบ ๐Ÿ”œ ๐Ÿ‘€ ๐Ÿ’–: ## ๐Ÿ—ƒ ๐Ÿ”– ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐ŸŒ– ๐Ÿ—ƒ ๐ŸŽ ๐Ÿ”– โš™๏ธ ๐Ÿ‘ช ๐Ÿ‘† โžก ๐Ÿ› ๏ธ โฎ๏ธ ๐Ÿ”ข `openapi_tags`. โšซ๏ธ โœŠ ๐Ÿ“‡ โš— 1๏ธโƒฃ ๐Ÿ“– ๐Ÿ”  ๐Ÿ”–. ๐Ÿ”  ๐Ÿ“– ๐Ÿ’ช ๐Ÿ”Œ: * `name` (**โœ”**): `str` โฎ๏ธ ๐ŸŽ ๐Ÿ“› ๐Ÿ‘† โš™๏ธ `tags` ๐Ÿ”ข ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* & `APIRouter`โ“‚. * `description`: `str` โฎ๏ธ ๐Ÿ“ ๐Ÿ“› ๐Ÿ”–. โšซ๏ธ ๐Ÿ’ช โœ”๏ธ โœ & ๐Ÿ”œ ๐ŸŽฆ ๐Ÿฉบ ๐ŸŽš. * `externalDocs`: `dict` ๐Ÿ”ฌ ๐Ÿ”ข ๐Ÿงพ โฎ๏ธ: * `description`: `str` โฎ๏ธ ๐Ÿ“ ๐Ÿ“› ๐Ÿ”ข ๐Ÿฉบ. * `url` (**โœ”**): `str` โฎ๏ธ ๐Ÿ“› ๐Ÿ”ข ๐Ÿงพ. ### โœ ๐Ÿ—ƒ ๐Ÿ”– โžก๏ธ ๐Ÿ”„ ๐Ÿ‘ˆ ๐Ÿ–ผ โฎ๏ธ ๐Ÿ”– `users` & `items`. โœ ๐Ÿ—ƒ ๐Ÿ‘† ๐Ÿ”– & ๐Ÿšถโ€โ™€๏ธ โšซ๏ธ `openapi_tags` ๐Ÿ”ข: {* ../../docs_src/metadata/tutorial004.py hl[3:16,18] *} ๐Ÿ‘€ ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช โš™๏ธ โœ ๐Ÿ”˜ ๐Ÿ“›, ๐Ÿ–ผ "๐Ÿ’ณ" ๐Ÿ”œ ๐ŸŽฆ ๐Ÿฆ (**๐Ÿ’ณ**) & "๐ŸŽ€" ๐Ÿ”œ ๐ŸŽฆ โ• (_๐ŸŽ€_). /// tip ๐Ÿ‘† ๐Ÿšซ โœ”๏ธ ๐Ÿšฎ ๐Ÿ—ƒ ๐ŸŒ ๐Ÿ”– ๐Ÿ‘ˆ ๐Ÿ‘† โš™๏ธ. /// ### โš™๏ธ ๐Ÿ‘† ๐Ÿ”– โš™๏ธ `tags` ๐Ÿ”ข โฎ๏ธ ๐Ÿ‘† *โžก ๐Ÿ› ๏ธ* (& `APIRouter`โ“‚) ๐Ÿ› ๏ธ ๐Ÿ‘ซ ๐ŸŽ ๐Ÿ”–: {* ../../docs_src/metadata/tutorial004.py hl[21,26] *} /// info โœ ๐ŸŒ… ๐Ÿ”ƒ ๐Ÿ”– [โžก ๐Ÿ› ๏ธ ๐Ÿ“ณ](path-operation-configuration.md#_3){.internal-link target=_blank}. /// ### โœ… ๐Ÿฉบ ๐Ÿ”œ, ๐Ÿšฅ ๐Ÿ‘† โœ… ๐Ÿฉบ, ๐Ÿ‘ซ ๐Ÿ”œ ๐ŸŽฆ ๐ŸŒ ๐ŸŒ– ๐Ÿ—ƒ: ### โœ” ๐Ÿ”– โœ” ๐Ÿ”  ๐Ÿ”– ๐Ÿ—ƒ ๐Ÿ“– ๐Ÿ”ฌ โœ” ๐ŸŽฆ ๐Ÿฉบ ๐ŸŽš. ๐Ÿ–ผ, โœ‹๏ธ `users` ๐Ÿ”œ ๐Ÿšถ โฎ๏ธ `items` ๐Ÿ”ค โœ”, โšซ๏ธ ๐ŸŽฆ โญ ๐Ÿ‘ซ, โ†ฉ๏ธ ๐Ÿ‘ฅ ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ—ƒ ๐Ÿฅ‡ ๐Ÿ“– ๐Ÿ“‡. ## ๐Ÿ—„ ๐Ÿ“› ๐Ÿ”ข, ๐Ÿ—„ ๐Ÿ”— ๐Ÿฆ `/openapi.json`. โœ‹๏ธ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— โšซ๏ธ โฎ๏ธ ๐Ÿ”ข `openapi_url`. ๐Ÿ–ผ, โš’ โšซ๏ธ ๐Ÿฆ `/api/v1/openapi.json`: {* ../../docs_src/metadata/tutorial002.py hl[3] *} ๐Ÿšฅ ๐Ÿ‘† ๐Ÿ’š โŽ ๐Ÿ—„ ๐Ÿ”— ๐Ÿ• ๐Ÿ‘† ๐Ÿ’ช โš’ `openapi_url=None`, ๐Ÿ‘ˆ ๐Ÿ”œ โŽ ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ‘ˆ โš™๏ธ โšซ๏ธ. ## ๐Ÿฉบ ๐Ÿ“› ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ”— 2๏ธโƒฃ ๐Ÿงพ ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ”ข ๐Ÿ”Œ: * **๐Ÿฆ ๐ŸŽš**: ๐Ÿฆ `/docs`. * ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿšฎ ๐Ÿ“› โฎ๏ธ ๐Ÿ”ข `docs_url`. * ๐Ÿ‘† ๐Ÿ’ช โŽ โšซ๏ธ โš’ `docs_url=None`. * **๐Ÿ“„**: ๐Ÿฆ `/redoc`. * ๐Ÿ‘† ๐Ÿ’ช โš’ ๐Ÿšฎ ๐Ÿ“› โฎ๏ธ ๐Ÿ”ข `redoc_url`. * ๐Ÿ‘† ๐Ÿ’ช โŽ โšซ๏ธ โš’ `redoc_url=None`. ๐Ÿ–ผ, โš’ ๐Ÿฆ ๐ŸŽš ๐Ÿฆ `/documentation` & โŽ ๐Ÿ“„: {* ../../docs_src/metadata/tutorial003.py hl[3] *}