1
1
# 첫걸μ
2
2
3
- κ°μ₯ λ¨μν FastAPI νμΌμ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²λλ€ :
3
+ κ°μ₯ λ¨μν FastAPI νμΌμ λ€μκ³Ό κ°μ΄ λ³΄μΌ κ²μ
λλ€ :
4
4
5
5
``` Python
6
6
{!../ ../ ../ docs_src/ first_steps/ tutorial001.py!}
7
7
```
8
8
9
- μλ₯Ό ` main.py ` μ 볡μ¬ν©λλ€.
9
+ μ μ½λλ₯Ό ` main.py ` μ 볡μ¬ν©λλ€.
10
10
11
11
λΌμ΄λΈ μλ²λ₯Ό μ€νν©λλ€:
12
12
@@ -29,9 +29,9 @@ $ uvicorn main:app --reload
29
29
30
30
* `main`: νμΌ `main.py` (νμ΄μ¬ "λͺ¨λ").
31
31
* `app`: `main.py` λ΄λΆμ `app = FastAPI()` μ€μμ μμ±ν μ€λΈμ νΈ.
32
- * `--reload`: μ½λ λ³κ²½ ν μλ² μ¬μμ. κ°λ°μλ§ μ¬μ©.
32
+ * `--reload`: μ½λ λ³κ²½ μ μλμΌλ‘ μλ² μ¬μμ. κ°λ° μμλ§ μ¬μ©.
33
33
34
- μΆλ ₯μ μλμ κ°μ μ€μ΄ μμ΅λλ€:
34
+ μΆλ ₯λλ μ€λ€ μ€μλ μλμ κ°μ λ΄μ©μ΄ μμ΅λλ€:
35
35
36
36
``` hl_lines="4"
37
37
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
@@ -75,7 +75,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
75
75
76
76
#### API "μ€ν€λ§"
77
77
78
- μ΄ κ²½μ°, <a href =" https://github.com/OAI/OpenAPI-Specification " class =" external-link " target =" _blank " >OpenAPI</a >λ APIμ μ€ν€λ§λ₯Ό μ΄λ»κ² μ μνλμ§ μ§μνλ κ·κ²©μ
λλ€.
78
+ <a href =" https://github.com/OAI/OpenAPI-Specification " class =" external-link " target =" _blank " >OpenAPI</a >λ APIμ μ€ν€λ§λ₯Ό μ΄λ»κ² μ μνλμ§ μ§μνλ κ·κ²©μ
λλ€.
79
79
80
80
μ΄ μ€ν€λ§ μ μλ API κ²½λ‘, κ°λ₯ν λ§€κ°λ³μ λ±μ ν¬ν¨ν©λλ€.
81
81
@@ -87,13 +87,13 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
87
87
88
88
#### OpenAPIμ JSON μ€ν€λ§
89
89
90
- OpenAPIλ APIμ λν API μ€ν€λ§λ₯Ό μ μν©λλ€. λν μ΄ μ€ν€λ§μλ JSON λ°μ΄ν° μ€ν€λ§μ νμ€μΈ ** JSON μ€ν€λ§** λ₯Ό μ¬μ©νμ¬ APIμμ 보λ΄κ³ λ°μ λ°μ΄ν°μ μ μ(λλ "μ€ν€λ§")λ₯Ό ν¬ν¨ν©λλ€.
90
+ OpenAPIλ λΉμ μ APIμ λν API μ€ν€λ§λ₯Ό μ μν©λλ€. λν μ΄ μ€ν€λ§λ JSON λ°μ΄ν° μ€ν€λ§μ νμ€μΈ ** JSON μ€ν€λ§** λ₯Ό μ¬μ©νμ¬ λΉμ μ APIκ° λ³΄λ΄κ³ λ°λ λ°μ΄ν°μ μ μ(λλ "μ€ν€λ§")λ₯Ό ν¬ν¨ν©λλ€.
91
91
92
92
#### ` openapi.json ` νμΈ
93
93
94
- κ°κ³΅λμ§ μμ OpenAPI μ€ν€λ§κ° μ΄λ»κ² μκ²Όλμ§ κΆκΈνλ€λ©΄, FastAPIλ μλμΌλ‘ APIμ μ€λͺ
κ³Ό ν¨κ» JSON (μ€ν€λ§)λ₯Ό μμ±ν©λλ€.
94
+ FastAPIλ μλμΌλ‘ APIμ μ€λͺ
κ³Ό ν¨κ» JSON (μ€ν€λ§)λ₯Ό μμ±ν©λλ€.
95
95
96
- μ¬κΈ°μμ μ§μ λ³Ό μ μμ΅λλ€: <a href =" http://127.0.0.1:8000/openapi.json " class =" external-link " target =" _blank " >http://127.0.0.1:8000/openapi.json </a >.
96
+ κ°κ³΅λμ§ μμ OpenAPI μ€ν€λ§κ° μ΄λ»κ² μκ²Όλμ§ κΆκΈνλ€λ©΄, μ¬κΈ°μμ μ§μ λ³Ό μ μμ΅λλ€: <a href =" http://127.0.0.1:8000/openapi.json " class =" external-link " target =" _blank " >http://127.0.0.1:8000/openapi.json </a >.
97
97
98
98
λ€μκ³Ό κ°μ΄ μμνλ JSONμ νμΈν μ μμ΅λλ€:
99
99
@@ -124,7 +124,7 @@ OpenAPI μ€ν€λ§λ ν¬ν¨λ λ κ°μ λνν λ¬Έμ μμ€ν
μ μ 곡
124
124
125
125
κ·Έλ¦¬κ³ OpenAPIμ λͺ¨λ κ²μ κΈ°λ°μΌλ‘ νλ μμ κ°μ§ λμμ΄ μμ΅λλ€. **FastAPI**λ‘ λΉλν μ ν리μΌμ΄μ
μ μ΄λ¬ν λμμ μ½κ² μΆκ° ν μ μμ΅λλ€.
126
126
127
- APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±νλ λ°λ μ¬μ©ν μ μμ΅λλ€. μλ‘ νλ‘ νΈμλ, λͺ¨λ°μΌ, IoT μ ν리μΌμ΄μ
μ΄ μμ΅λλ€.
127
+ APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈ(νλ‘ νΈμλ, λͺ¨λ°μΌ, IoT μ ν리μΌμ΄μ
λ±)λ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±νλ λ°λ μ¬μ©ν μ μμ΅λλ€.
128
128
129
129
## λ¨κ³λ³ μμ½
130
130
@@ -134,7 +134,7 @@ APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±ν
134
134
{!../../../docs_src/first_steps/tutorial001.py! }
135
135
```
136
136
137
- `FastAPI`λ APIμ λν λͺ¨λ κΈ°λ₯μ μ 곡νλ νμ΄μ¬ ν΄λμ€μ
λλ€.
137
+ `FastAPI`λ λΉμ μ APIλ₯Ό μν λͺ¨λ κΈ°λ₯μ μ 곡νλ νμ΄μ¬ ν΄λμ€μ
λλ€.
138
138
139
139
!!! note "κΈ°μ μΈλΆμ¬ν"
140
140
`FastAPI`λ `Starlette`λ₯Ό μ§μ μμνλ ν΄λμ€μ
λλ€.
@@ -147,11 +147,11 @@ APIμ ν΅μ νλ ν΄λΌμ΄μΈνΈλ₯Ό μν΄ μ½λλ₯Ό μλμΌλ‘ μμ±ν
147
147
{!../../../docs_src/first_steps/tutorial001.py! }
148
148
```
149
149
150
- μ¬κΈ° μλ `app` λ³μλ `FastAPI` ν΄λμ€μ "μΈμ€ν΄μ€"κ° λ©λλ€.
150
+ μ¬κΈ°μμ `app` λ³μλ `FastAPI` ν΄λμ€μ "μΈμ€ν΄μ€"κ° λ©λλ€.
151
151
152
- μ΄κ²μ λͺ¨λ APIλ₯Ό μμ±νκΈ° μν μνΈμμ©μ μ£Όμ μ§μ μ΄ λ κ²μ
λλ€.
152
+ μ΄κ²μ λΉμ μ λͺ¨λ APIλ₯Ό μμ±νκΈ° μν μνΈμμ©μ μ£Όμ μ§μ μ΄ λ κ²μ
λλ€.
153
153
154
- μ΄ `app`μ λ€μ λͺ
λ Ήμμ `uvicorn`μ΄ μ°Έμ‘°νκ³ κ²κ³Ό λμΌν©λλ€:
154
+ μ΄ `app`μ λ€μ λͺ
λ Ήμμ `uvicorn`μ΄ μ°Έμ‘°νκ³ μλ κ²κ³Ό λμΌν©λλ€:
155
155
156
156
<div class="termy">
157
157
@@ -181,11 +181,11 @@ $ uvicorn main:my_awesome_api --reload
181
181
182
182
</div>
183
183
184
- ### 3 λ¨κ³: *κ²½λ‘ λμ * μμ±
184
+ ### 3 λ¨κ³: *κ²½λ‘ μλ * μμ±
185
185
186
186
#### κ²½λ‘
187
187
188
- μ¬κΈ°μ "κ²½λ‘"λ 첫 λ²μ§Έ `/`μμ μμνλ URLμ λ§μ§λ§ λΆλΆμ λνλ
λλ€ .
188
+ μ¬κΈ°μ "κ²½λ‘"λ 첫 λ²μ§Έ `/`λΆν° μμνλ URLμ λ·λΆλΆμ μλ―Έν©λλ€ .
189
189
190
190
κ·Έλ¬λ―λ‘ μλμ κ°μ URLμμ:
191
191
@@ -200,13 +200,13 @@ https://example.com/items/foo
200
200
```
201
201
202
202
!!! info "μ 보"
203
- " κ²½λ‘" λ μΌλ°μ μΌλ‘ "μ€λν¬μΈνΈ " λλ "λΌμ°νΈ"λΌκ³ λ λΆλ¦½λλ€.
203
+ " κ²½λ‘" λ μΌλ°μ μΌλ‘ "μλν¬μΈνΈ " λλ "λΌμ°νΈ"λΌκ³ λ λΆλ¦½λλ€.
204
204
205
- APIλ₯Ό λΉλνλ λμ "κ²½λ‘"λ "κ΄μ¬μ¬"μ "리μμ€"λ₯Ό λΆλ¦¬νλ μ£Όμ λ°©λ²μ
λλ€.
205
+ APIλ₯Ό μ€κ³ν λ "κ²½λ‘"λ "κ΄μ¬μ¬"μ "리μμ€"λ₯Ό λΆλ¦¬νκΈ° μν μ£Όμν λ°©λ²μ
λλ€.
206
206
207
- #### λμ
207
+ #### μλ
208
208
209
- μ¬κΈ°μ "λμ (Operation)"μ HTTP "λ©μλ" μ€ νλλ₯Ό λνλ
λλ€.
209
+ " μλ (Operation)" μ HTTP "λ©μλ" μ€ νλλ₯Ό λνλ
λλ€.
210
210
211
211
λ€μ μ€ νλμ΄λ©°:
212
212
@@ -215,7 +215,7 @@ APIλ₯Ό λΉλνλ λμ "κ²½λ‘"λ "κ΄μ¬μ¬"μ "리μμ€"λ₯Ό λΆλ¦¬ν
215
215
* `PUT`
216
216
* `DELETE`
217
217
218
- ...μ΄κ΅μ μΈ κ²λ€λ μμ΅λλ€:
218
+ ...νν μ¬μ©λμ§ μλ κ²λ€λ μμ΅λλ€:
219
219
220
220
* `OPTIONS`
221
221
* `HEAD`
@@ -226,20 +226,20 @@ HTTP νλ‘ν μ½μμλ μ΄λ¬ν "λ©μλ"λ₯Ό νλ(λλ μ΄μ) μ¬μ©
226
226
227
227
---
228
228
229
- APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄ νΉμ HTTP λ©μλλ₯Ό μ¬μ©ν©λλ€.
229
+ APIλ₯Ό μ€κ³ν λ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄ νΉμ HTTP λ©μλλ₯Ό μ¬μ©ν©λλ€.
230
230
231
- μΌλ°μ μΌλ‘ λ€μμ μ¬μ©ν©λλ€ :
231
+ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ΅λλ€ :
232
232
233
233
* `POST`: λ°μ΄ν°λ₯Ό μμ±νκΈ° μν΄.
234
234
* `GET`: λ°μ΄ν°λ₯Ό μ½κΈ° μν΄.
235
- * `PUT`: λ°μ΄ν°λ₯Ό μ
λ°μ΄νΈνκΈ° μν΄.
235
+ * `PUT`: λ°μ΄ν°λ₯Ό μμ νκΈ° μν΄.
236
236
* `DELETE`: λ°μ΄ν°λ₯Ό μμ νκΈ° μν΄.
237
237
238
- κ·Έλμ OpenAPIμμλ κ° HTTP λ©μλλ€μ "λμ "μ΄λΌ λΆλ¦
λλ€.
238
+ κ·Έλμ OpenAPIμμλ κ° HTTP λ©μλλ€μ "μλ "μ΄λΌ λΆλ¦
λλ€.
239
239
240
- μ΄μ λΆν° μ°λ¦¬λ λ©μλλ₯Ό "**λμ **"μ΄λΌκ³ λ λΆλ₯Όκ²λλ€ .
240
+ μ°λ¦¬ μμ μ΄μ λΆν° λ©μλλ₯Ό "**μλ **"μ΄λΌκ³ λΆλ₯Ό κ²μ
λλ€ .
241
241
242
- #### *κ²½λ‘ λμ λ°μ½λ μ΄ν°* μ μ
242
+ #### *κ²½λ‘ μλ λ°μ½λ μ΄ν°* μ μ
243
243
244
244
```Python hl_lines="6"
245
245
{!../../../docs_src/first_steps/tutorial001.py! }
@@ -248,47 +248,47 @@ APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄
248
248
`@app.get("/")`μ **FastAPI**μκ² λ°λ‘ μλμ μλ ν¨μκ° λ€μμΌλ‘ μ΄λνλ μμ²μ μ²λ¦¬νλ€λ κ²μ μλ €μ€λλ€.
249
249
250
250
* κ²½λ‘ `/`
251
- * <abbr title="HTTP GET λ©μλ"><code>get</code> λμ </abbr> μ¬μ©
251
+ * <abbr title="HTTP GET λ©μλ"><code>get</code> μλ </abbr> μ¬μ©
252
252
253
253
!!! info "`@decorator` μ 보"
254
254
μ΄ `@something` λ¬Έλ²μ νμ΄μ¬μμ "λ°μ½λ μ΄ν°"λΌ λΆλ¦
λλ€.
255
255
256
- ν¨μ 맨 μμ λμ΅λλ€. λ§μΉ μμ μ₯μμ©(Decorative) λͺ¨μμ²λΌ(κ°μΈμ μΌλ‘ μ΄ μ©μ΄κ° μ¬κΈ°μ μ λνκ±° κ°μ΅λλ€).
256
+ λ§μΉ μμ μ₯μμ©(Decorative) λͺ¨μμ²λΌ(κ°μΈμ μΌλ‘ μ΄ μ©μ΄κ° μ¬κΈ°μ μ λν κ² κ°μ΅λλ€) ν¨μ 맨 μμ λμ΅λλ€ .
257
257
258
- " λ°μ½λ μ΄ν°" μλ μλ ν¨μλ₯Ό λ°κ³ κ·Έκ±Έ μ΄μ©ν΄ 무μΈκ° ν©λλ€.
258
+ " λ°μ½λ μ΄ν°" λ μλ μλ ν¨μλ₯Ό λ°μ κ·Έκ²μΌλ‘ 무μΈκ°λ₯Ό ν©λλ€.
259
259
260
- μ°λ¦¬μ κ²½μ°, μ΄ λ°μ½λ μ΄ν°λ **FastAPI**μκ² μλ ν¨μκ° **κ²½λ‘** `/`μ ν΄λΉνλ `get` **λμ**νλΌκ³ μλ €μ€λλ€.
260
+ μ°λ¦¬μ κ²½μ°, μ΄ λ°μ½λ μ΄ν°λ **FastAPI**μκ² μλ ν¨μκ° **κ²½λ‘** `/`μ `get` **μλ**μ ν΄λΉνλ€κ³ μλ €μ€λλ€.
261
261
262
- μ΄κ²μ΄ "**κ²½λ‘ λμ λ°μ½λ μ΄ν°**"μ
λλ€.
262
+ μ΄κ²μ΄ "**κ²½λ‘ μλ λ°μ½λ μ΄ν°**"μ
λλ€.
263
263
264
- λ€λ₯Έ λμλ μΈ μ μμ΅λλ€:
264
+ λ€λ₯Έ μλλ μ¬μ©ν μ μμ΅λλ€:
265
265
266
266
* `@app.post()`
267
267
* `@app.put()`
268
268
* `@app.delete()`
269
269
270
- μ΄κ΅μ μΈ κ²λ€λ μμ΅λλ€:
270
+ νν μ¬μ©λμ§ μλ κ²λ€λ μμ΅λλ€:
271
271
272
272
* `@app.options()`
273
273
* `@app.head()`
274
274
* `@app.patch()`
275
275
* `@app.trace()`
276
276
277
277
!!! tip "ν"
278
- κ° λμ (HTTP λ©μλ)μ μνλ λλ‘ μ¬μ©ν΄λ λ©λλ€.
278
+ κ° μλ (HTTP λ©μλ)μ μνλ λλ‘ μ¬μ©ν΄λ λ©λλ€.
279
279
280
280
**FastAPI**λ νΉμ μλ―Έλ₯Ό κ°μ νμ§ μμ΅λλ€.
281
281
282
- μ¬κΈ°μ μ 보λ μ§μΉ¨μμΌλΏ μꡬμ¬νμ΄ μλλλ€.
282
+ μ¬κΈ°μ μ 보λ μ§μΉ¨μμΌλΏ κ°μ μ¬νμ΄ μλλλ€.
283
283
284
- μλ₯Ό λ€μ΄ GraphQLμ μ¬μ©ν λ μΌλ°μ μΌλ‘ `POST` λμλ§ μ¬μ©νμ¬ λͺ¨λ νλμ μνν©λλ€.
284
+ μλ₯Ό λ€μ΄ GraphQLμ μ¬μ©νλ κ²½μ°, μΌλ°μ μΌλ‘ `POST` μλλ§ μ¬μ©νμ¬ λͺ¨λ νλμ μνν©λλ€.
285
285
286
- ### 4 λ¨κ³: **κ²½λ‘ λμ ν¨μ** μ μ
286
+ ### 4 λ¨κ³: **κ²½λ‘ μλ ν¨μ** μ μ
287
287
288
- λ€μμ μ°λ¦¬μ "**κ²½λ‘ λμ ν¨μ**"μ
λλ€:
288
+ λ€μμ μ°λ¦¬μ "**κ²½λ‘ μλ ν¨μ**"μ
λλ€:
289
289
290
290
* **κ²½λ‘**: λ `/`μ
λλ€.
291
- * **λμ **: μ `get`μ
λλ€.
291
+ * **μλ **: μ `get`μ
λλ€.
292
292
* **ν¨μ**: λ "λ°μ½λ μ΄ν°" μλμ μλ ν¨μμ
λλ€ (`@app.get("/")` μλ).
293
293
294
294
```Python hl_lines="7"
@@ -297,13 +297,13 @@ APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄
297
297
298
298
μ΄κ²μ νμ΄μ¬ ν¨μμ
λλ€.
299
299
300
- `GET` λμμ μ¬μ©νμ¬ URL "`/`"μ λν μμ²μ λ°μ λλ§λ€ **FastAPI**μ μν΄ νΈμΆλ©λλ€.
300
+ URL "`/`"μ λν `GET` μλμ μ¬μ©νλ μμ²μ λ°μ λλ§λ€ **FastAPI**μ μν΄ νΈμΆλ©λλ€.
301
301
302
- μμ κ²½μ° `async` ν¨μμ
λλ€.
302
+ μμ μμμμ μ΄ ν¨μλ `async`(λΉλκΈ°) ν¨μμ
λλ€.
303
303
304
304
---
305
305
306
- `async def` λμ μΌλ° ν¨μλ‘ μ μν μ μμ΅λλ€:
306
+ `async def`μ μ΄μ©νλ λμ μΌλ° ν¨μλ‘ μ μν μ μμ΅λλ€:
307
307
308
308
```Python hl_lines="7"
309
309
{!../../../docs_src/first_steps/tutorial003.py! }
@@ -322,12 +322,12 @@ APIλ₯Ό λΉλνλ λμ μΌλ°μ μΌλ‘ νΉμ νλμ μννκΈ° μν΄
322
322
323
323
Pydantic λͺ¨λΈμ λ°νν μλ μμ΅λλ€(λμ€μ λ μμΈν μ΄ν΄λ΄
λλ€).
324
324
325
- JSONμΌλ‘ μλ λ³νλλ κ°μ²΄λ€κ³Ό λͺ¨λΈλ€μ΄ λ§μ΄ μμ΅λλ€ (ORM λ±μ ν¬ν¨ν΄μμ) . κ°μ₯ λ§μμ λλ κ²μ μ¬μ©νμΈμ , μ΄λ―Έ μ§μλκ³ μμ κ²λλ€ .
325
+ JSONμΌλ‘ μλ λ³νλλ κ°μ²΄λ€κ³Ό λͺ¨λΈλ€ (ORM λ±μ ν¬ν¨ν΄μ)μ΄ λ§μ΄ μμ΅λλ€ . κ°μ₯ λ§μμ λλ κ²μ μ¬μ©νμμμ€ , μ΄λ―Έ μ§μλκ³ μμ κ²μ
λλ€ .
326
326
327
327
## μμ½
328
328
329
329
* `FastAPI` μν¬νΈ.
330
330
* `app` μΈμ€ν΄μ€ μμ±.
331
- * (`@app.get("/")`μ²λΌ) **κ²½λ‘ λμ λ°μ½λ μ΄ν°** μμ±.
332
- * (μμ μλ `def root(): ...`μ²λΌ) **κ²½λ‘ λμ ν¨μ** μμ±.
331
+ * (`@app.get("/")`μ²λΌ) **κ²½λ‘ μλ λ°μ½λ μ΄ν°** μμ±.
332
+ * (μμ μλ `def root(): ...`μ²λΌ) **κ²½λ‘ μλ ν¨μ** μμ±.
333
333
* (`uvicorn main:app --reload`μ²λΌ) κ°λ° μλ² μ€ν.
0 commit comments