|
| 1 | + |
| 2 | +# λ©νλ°μ΄ν° λ° λ¬Έμν URL |
| 3 | + |
| 4 | +**FastAPI** μμ© νλ‘κ·Έλ¨μμ λ€μν λ©νλ°μ΄ν° ꡬμ±μ μ¬μ©μ λ§μΆ€ μ€μ ν μ μμ΅λλ€. |
| 5 | + |
| 6 | +## APIμ λν λ©νλ°μ΄ν° |
| 7 | + |
| 8 | +OpenAPI λͺ
μΈ λ° μλνλ API λ¬Έμ UIμ μ¬μ©λλ λ€μ νλλ₯Ό μ€μ ν μ μμ΅λλ€: |
| 9 | + |
| 10 | +| λ§€κ°λ³μ | νμ
| μ€λͺ
| |
| 11 | +|----------|------|-------| |
| 12 | +| `title` | `str` | APIμ μ λͺ©μ
λλ€. | |
| 13 | +| `summary` | `str` | APIμ λν μ§§μ μμ½μ
λλ€. <small>OpenAPI 3.1.0, FastAPI 0.99.0λΆν° μ¬μ© κ°λ₯</small> | |
| 14 | +| `description` | `str` | APIμ λν μ§§μ μ€λͺ
μ
λλ€. λ§ν¬λ€μ΄μ μ¬μ©ν μ μμ΅λλ€. | |
| 15 | +| `version` | `string` | APIμ λ²μ μ
λλ€. OpenAPIμ λ²μ μ΄ μλ, μ¬λ¬λΆμ μ ν리μΌμ΄μ
μ λ²μ μ λνλ
λλ€. μ: `2.5.0` | |
| 16 | +| `terms_of_service` | `str` | API μ΄μ© μ½κ΄μ URLμ
λλ€. μ 곡νλ κ²½μ° URL νμμ΄μ΄μΌ ν©λλ€. | |
| 17 | +| `contact` | `dict` | λ
ΈμΆλ APIμ λν μ°λ½μ² μ 보μ
λλ€. μ¬λ¬ νλλ₯Ό ν¬ν¨ν μ μμ΅λλ€. <details><summary><code>contact</code> νλ</summary><table><thead><tr><th>λ§€κ°λ³μ</th><th>νμ
</th><th>μ€λͺ
</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>μ°λ½μ² μΈλ¬Ό/μ‘°μ§μ μλ³λͺ
μ
λλ€.</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>μ°λ½μ² μ λ³΄κ° λ΄κΈ΄ URLμ
λλ€. URL νμμ΄μ΄μΌ ν©λλ€.</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>μ°λ½μ² μΈλ¬Ό/μ‘°μ§μ μ΄λ©μΌ μ£Όμμ
λλ€. μ΄λ©μΌ μ£Όμ νμμ΄μ΄μΌ ν©λλ€.</td></tr></tbody></table></details> | |
| 18 | +| `license_info` | `dict` | λ
ΈμΆλ APIμ λΌμ΄μ μ€ μ 보μ
λλ€. μ¬λ¬ νλλ₯Ό ν¬ν¨ν μ μμ΅λλ€. <details><summary><code>license_info</code> νλ</summary><table><thead><tr><th>λ§€κ°λ³μ</th><th>νμ
</th><th>μ€λͺ
</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>νμ</strong> (<code>license_info</code>κ° μ€μ λ κ²½μ°). APIμ μ¬μ©λ λΌμ΄μ μ€ μ΄λ¦μ
λλ€.</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>APIμ λν <a href="https://spdx.org/licenses/" class="external-link" target="_blank">SPDX</a> λΌμ΄μ μ€ ννμ
λλ€. <code>identifier</code> νλλ <code>url</code> νλμ μνΈ λ°°νμ μ
λλ€. <small>OpenAPI 3.1.0, FastAPI 0.99.0λΆν° μ¬μ© κ°λ₯</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>APIμ μ¬μ©λ λΌμ΄μ μ€μ URLμ
λλ€. URL νμμ΄μ΄μΌ ν©λλ€.</td></tr></tbody></table></details> | |
| 19 | + |
| 20 | +λ€μκ³Ό κ°μ΄ μ€μ ν μ μμ΅λλ€: |
| 21 | + |
| 22 | +```Python hl_lines="3-16 19-32" |
| 23 | +{!../../docs_src/metadata/tutorial001.py!} |
| 24 | +``` |
| 25 | + |
| 26 | +/// tip |
| 27 | + |
| 28 | +`description` νλμ λ§ν¬λ€μ΄μ μ¬μ©ν μ μμΌλ©°, μΆλ ₯μμ λ λλ§λ©λλ€. |
| 29 | + |
| 30 | +/// |
| 31 | + |
| 32 | +μ΄ κ΅¬μ±μ μ¬μ©νλ©΄ λ¬Έμ μλν(λ‘ μμ±λ) API λ¬Έμλ λ€μκ³Ό κ°μ΄ 보μ
λλ€: |
| 33 | + |
| 34 | +<img src="/img/tutorial/metadata/image01.png"> |
| 35 | + |
| 36 | +## λΌμ΄μ μ€ μλ³μ |
| 37 | + |
| 38 | +OpenAPI 3.1.0 λ° FastAPI 0.99.0λΆν° `license_info`μ `identifier`λ₯Ό URL λμ μ€μ ν μ μμ΅λλ€. |
| 39 | + |
| 40 | +μ: |
| 41 | + |
| 42 | +```Python hl_lines="31" |
| 43 | +{!../../docs_src/metadata/tutorial001_1.py!} |
| 44 | +``` |
| 45 | + |
| 46 | +## νκ·Έμ λν λ©νλ°μ΄ν° |
| 47 | + |
| 48 | +`openapi_tags` λ§€κ°λ³μλ₯Ό μ¬μ©νμ¬ κ²½λ‘ μλμ κ·Έλ£Ήννλ λ° μ¬μ©λλ νκ·Έμ μΆκ° λ©νλ°μ΄ν°λ₯Ό μΆκ°ν μ μμ΅λλ€. |
| 49 | + |
| 50 | +리μ€νΈλ κ° νκ·Έμ λν΄ νλμ λμ
λ리λ₯Ό ν¬ν¨ν΄μΌ ν©λλ€. |
| 51 | + |
| 52 | +κ° λμ
λ리μλ λ€μμ΄ ν¬ν¨λ μ μμ΅λλ€: |
| 53 | + |
| 54 | +* `name` (**νμ**): `tags` λ§€κ°λ³μμμ *κ²½λ‘ μλ*κ³Ό `APIRouter`μ μ¬μ©λ νκ·Έ μ΄λ¦κ³Ό λμΌν `str`μ
λλ€. |
| 55 | +* `description`: νκ·Έμ λν κ°λ¨ν μ€λͺ
μ λ΄μ `str`μ
λλ€. λ§ν¬λ€μ΄μ μ¬μ©ν μ μμΌλ©° λ¬Έμ UIμ νμλ©λλ€. |
| 56 | +* `externalDocs`: μΈλΆ λ¬Έμλ₯Ό μ€λͺ
νλ `dict`μ΄λ©°: |
| 57 | + * `description`: μΈλΆ λ¬Έμμ λν κ°λ¨ν μ€λͺ
μ λ΄μ `str`μ
λλ€. |
| 58 | + * `url` (**νμ**): μΈλΆ λ¬Έμμ URLμ λ΄μ `str`μ
λλ€. |
| 59 | + |
| 60 | +### νκ·Έμ λν λ©νλ°μ΄ν° μμ± |
| 61 | + |
| 62 | +`users` λ° `items`μ λν νκ·Έ μμμ ν¨κ» λ©νλ°μ΄ν°λ₯Ό μμ±νκ³ μ΄λ₯Ό `openapi_tags` λ§€κ°λ³μλ‘ μ λ¬ν΄ λ³΄κ² μ΅λλ€: |
| 63 | + |
| 64 | +```Python hl_lines="3-16 18" |
| 65 | +{!../../docs_src/metadata/tutorial004.py!} |
| 66 | +``` |
| 67 | + |
| 68 | +μ€λͺ
μμ λ§ν¬λ€μ΄μ μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ "login"μ κ΅΅κ²(**login**) νμλκ³ , "fancy"λ κΈ°μΈμκΌ΄(_fancy_)λ‘ νμλ©λλ€. |
| 69 | + |
| 70 | +/// tip |
| 71 | + |
| 72 | +μ¬μ© μ€μΈ λͺ¨λ νκ·Έμ λ©νλ°μ΄ν°λ₯Ό μΆκ°ν νμλ μμ΅λλ€. |
| 73 | + |
| 74 | +/// |
| 75 | + |
| 76 | +### νκ·Έ μ¬μ© |
| 77 | + |
| 78 | +`tags` λ§€κ°λ³μλ₯Ό *κ²½λ‘ μλ* λ° `APIRouter`μ ν¨κ» μ¬μ©νμ¬ νκ·Έμ ν λΉν μ μμ΅λλ€: |
| 79 | + |
| 80 | +```Python hl_lines="21 26" |
| 81 | +{!../../docs_src/metadata/tutorial004.py!} |
| 82 | +``` |
| 83 | + |
| 84 | +/// info |
| 85 | + |
| 86 | +νκ·Έμ λν μμΈν λ΄μ©μ [κ²½λ‘ μλ ꡬμ±](path-operation-configuration.md#tags){.internal-link target=_blank}μμ μ½μ΄λ³΄μΈμ. |
| 87 | + |
| 88 | +/// |
| 89 | + |
| 90 | +### λ¬Έμ νμΈ |
| 91 | + |
| 92 | +μ΄μ λ¬Έμλ₯Ό νμΈνλ©΄ λͺ¨λ μΆκ° λ©νλ°μ΄ν°κ° νμλ©λλ€: |
| 93 | + |
| 94 | +<img src="/img/tutorial/metadata/image02.png"> |
| 95 | + |
| 96 | +### νκ·Έ μμ |
| 97 | + |
| 98 | +κ° νκ·Έ λ©νλ°μ΄ν° λμ
λ리μ μμλ λ¬Έμ UIμ νμλλ μμλ₯Ό μ μν©λλ€. |
| 99 | + |
| 100 | +μλ₯Ό λ€μ΄, μνλ²³ μμμ `users`λ `items` λ€μ μ€μ§λ§, μ°λ¦¬λ `users` λ©νλ°μ΄ν°λ₯Ό 리μ€νΈμ 첫 λ²μ§Έ λμ
λλ¦¬λ‘ μΆκ°νκΈ° λλ¬Έμ λ¨Όμ νμλ©λλ€. |
| 101 | + |
| 102 | +## OpenAPI URL |
| 103 | + |
| 104 | +OpenAPI ꡬ쑰λ κΈ°λ³Έμ μΌλ‘ `/openapi.json`μμ μ 곡λ©λλ€. |
| 105 | + |
| 106 | +`openapi_url` λ§€κ°λ³μλ₯Ό ν΅ν΄ μ΄λ₯Ό μ€μ ν μ μμ΅λλ€. |
| 107 | + |
| 108 | +μλ₯Ό λ€μ΄, μ΄λ₯Ό `/api/v1/openapi.json`μ μ 곡νλλ‘ μ€μ νλ €λ©΄: |
| 109 | + |
| 110 | +```Python hl_lines="3" |
| 111 | +{!../../docs_src/metadata/tutorial002.py!} |
| 112 | +``` |
| 113 | + |
| 114 | +OpenAPI ꡬ쑰λ₯Ό μμ ν λΉνμ±ννλ €λ©΄ `openapi_url=None`μΌλ‘ μ€μ ν μ μμΌλ©°, μ΄λ₯Ό μ¬μ©νμ¬ λ¬Έμν μ¬μ©μ μΈν°νμ΄μ€λ λΉνμ±νλ©λλ€. |
| 115 | + |
| 116 | +## λ¬Έμν URL |
| 117 | + |
| 118 | +ν¬ν¨λ λ κ°μ§ λ¬Έμν μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ€μ ν μ μμ΅λλ€: |
| 119 | + |
| 120 | +* **Swagger UI**: `/docs`μμ μ 곡λ©λλ€. |
| 121 | + * `docs_url` λ§€κ°λ³μλ‘ URLμ μ€μ ν μ μμ΅λλ€. |
| 122 | + * `docs_url=None`μΌλ‘ μ€μ νμ¬ λΉνμ±νν μ μμ΅λλ€. |
| 123 | +* **ReDoc**: `/redoc`μμ μ 곡λ©λλ€. |
| 124 | + * `redoc_url` λ§€κ°λ³μλ‘ URLμ μ€μ ν μ μμ΅λλ€. |
| 125 | + * `redoc_url=None`μΌλ‘ μ€μ νμ¬ λΉνμ±νν μ μμ΅λλ€. |
| 126 | + |
| 127 | +μλ₯Ό λ€μ΄, Swagger UIλ₯Ό `/documentation`μμ μ 곡νκ³ ReDocμ λΉνμ±ννλ €λ©΄: |
| 128 | + |
| 129 | +```Python hl_lines="3" |
| 130 | +{!../../docs_src/metadata/tutorial003.py!} |
| 131 | +``` |
0 commit comments