FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.
FastAPI არის თანამედროვე, სწრაფი (მაღალი წარმადობის მქონე), Python-ზე დაფუძნებული ვებფრეიმვორქი, რომელიც იყენებს Python-ის სტანდარტულ ტიპთა ანოტაციებს და საშუალებას გვაძლევს შევქმნათ API-ები.
The key features are:
მისი ძირითადი მახასიათებლები გახლავთ:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
* **სისწრაფე**: აქვს ძალიან მაღალი წარმადობა, როგორც **NodeJS**-სა და **Go**-ს (მადლობა Starlette-სა და Pydantic-ს). [ერთ-ერთი უსწრაფესი ფრეიმვორქია Python-ის არსებულ ფრეიმვორქებს შორის](#performance).
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *
* **ეფექტურობა**: დეველოპმენტის პროცესს აჩქარებს დაახლოებით 200-300 პროცენტით. *
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *
* **ნაკლები პროგრამული ხარვეზი**: ადამიანის (დეველოპერის) მიერ გამოწვეული ხარვეზების ალბათობას ამცირებს დაახლოებით 40 პროცენტით. *
* **Intuitive**: Great editor support. <abbrtitle="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.
* **ინტუიციურობა**: შესანიშნავი თავსებადობა ტექსტურ რედაქტორებთან. <abbrtitle="ასევე ცნობილია, როგორც: ავტოდასრულება, ავტომატური დასრულება, IntelliSense-ი">კოდის ავტოდასრულების</abbr> ფუნქციონალი ხელმისაწვდომია ყველგან. ნაკლებ დროს დახარჯავთ ხარვეზების აღმოფხვრაში.
* **Easy**: Designed to be easy to use and learn. Less time reading docs.
* **სიმარტივე**: ტექნოლოგია შემუშავებულია იმგვარად, რომ მარტივად გამოსაყენებელი და ასათვისებელი იყოს. დოკუმენტაციის კითხვაში ნაკლებ დროს დახარჯავთ.
* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
* **კომპაქტურობა**: კოდის დუბლიკაციის საჭიროება მინიმუმამდეა დაყვანილი. თითოეული პარამეტრის განსაზღვრით აქტიურდება მრავალი ფუნქციონალი. პროგრამული ხარვეზების წარმოქმნის ალბათობა მინიმუმამდეა დაყვანილი.
* **Robust**: Get production-ready code. With automatic interactive documentation.
* **მდგრადობა**: მიიღებთ წარმოებაში ჩაშვებისათვის გამზადებულ კოდს. ამას გარდა, მიიღებთ ავტომატურად გენერირებულ ინტერაქციულ დოკუმენტაციას.
* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: <ahref="https://github.com/OAI/OpenAPI-Specification"class="external-link"target="_blank">OpenAPI</a> (previously known as Swagger) and <ahref="https://json-schema.org/"class="external-link"target="_blank">JSON Schema</a>.
* **სტანდარტებზე დაფუძნებულობა**: დაფუძნებულია (და სრულად თავსებადია) API-ებისთვის განსაზღვრულ ღია სტანდარტებზე: <ahref="https://github.com/OAI/OpenAPI-Specification"class="external-link"target="_blank">OpenAPI</a> (ადრე ცნობილი იყო, როგორც Swagger) და <ahref="https://json-schema.org/"class="external-link"target="_blank">JSON Schema</a>.
<small>* estimation based on tests on an internal development team, building production applications.</small>
<small>* ზემოთ მოცემული შეფასებები ეფუძნება წარმოებაში ჩაშვებულ (რეალურ) აპლიკაციებზე მომუშავე შიდა დეველოპმენტის გუნდის ტესტებს.</small>
"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._"
"_[...] ბოლო დროს, ძალიან ხშირად ვიყენებ **FastAPI**-ს. [...] სიმართლე გითხრათ, მის გამოყენებას ვაპირებ ყველა იმ **ML სერვისისთვის Microsoft-ში**, რაზეც კი ჩემი გუნდი მუშაობს. აღნიშნული სერვისებიდან ზოგიერთი ინტეგრირებულია **Windows**-ის ბირთვში, ზოგი კი — **Office**-ის პროდუქტებში._"
"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_"
<divstyle="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong><ahref="https://eng.uber.com/ludwig-v0-2/"target="_blank"><small>(ref)</small></a></div>
---
"_ჩვენ გამოვიყენეთ **FastAPI** ბიბლიოთეკა **REST** სერვერის შესაქმნელად, რომლის დანიშნულებაა სხვადასხვა **პროგნოზების** გაკეთება. [Ludwig-ისთვის]_"
"_ჩვენ გამოვიყენეთ **FastAPI** ბიბლიოთეკა **REST** სერვერის შესაქმნელად, რომლის დანიშნულება გახლავთ სხვადასხვა **პროგნოზების** გაკეთება. [Ludwig-ისთვის]_"
<divstyle="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong><ahref="https://eng.uber.com/ludwig-v0-2/"target="_blank"><small>(ref)</small></a></div>
---
"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_"
"_**Netflix**-ის სახელით მოხარული ვარ, გაცნობოთ ჩვენი **კრიზისის მართვის** ორკესტრაციის სისტემის, **Dispatch**-ის წყაროს ღია რელიზის შესახებ! [რომელიც შექმნილია **FastAPI**-ის გამოყენებით]_"
"_**Netflix**-ის სახელით, მოხარული ვარ, გაცნობოთ ჩვენი **კრიზისის მართვის** ორკესტრაციის სისტემის, **Dispatch**-ის წყაროს ღია რელიზის შესახებ! [რომელიც შექმნილია **FastAPI**-ს გამოყენებით]_"
"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._"
"_გულწრფელად გეუბნებით, თქვენი ნამუშევარი ძალიან სანდოდ და დახვეწილად გამოიყურება. სწორედ ეს არის ის, რაც მინდოდა **Hug**-ი ყოფილიყო — მართლაც შთამაგონებელია იმის დანახვა, რომ ვიღაცამ შეძლო ამის შექმნა._"
"_გულწრფელად გეუბნებით, თქვენი ნამუშევარი ძალიან სანდოდ და დახვეწილად გამოიყურება. სწორედ ეს არის ის, რაც მინდოდა **Hug**-ი ყოფილიყო - მართლაც შთამაგონებელია იმის დანახვა, რომ ვიღაცამ შეძლო ამის შექმნა._"
"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_"
"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_"
"_თუ **თანამედროვე ფრეიმვორქს** ეძებთ, რომლითაც REST API-ების შექმნა შესაძლებელია, გაიცანით **FastAPI**-ი [...] იგი არის სწრაფი, მარტივი გამოსაყენებელი და ადვილად შესასწავლი [...]_"
"_თუ **თანამედროვე ფრეიმვორქს** ეძებთ, რომლითაც REST API-ების შექმნაა შესაძლებელი, გაეცანით **FastAPI**-ს [...] იგი არის სწრაფი, მარტივად გამოსაყენებელი და ადვილად შესასწავლი [...]_"
"_ჩვენ გადავაწყეთ ჩვენი **API**-ები **FastAPI**-ზე [...] ვფიქრობ, აღნიშნული ფრეიმვორქი გულგრილს არავის დატოვებს [...]_"
@ -154,40 +109,27 @@ The key features are:
---
"_If anyone is looking to build a production Python API, I would highly recommend **FastAPI**. It is **beautifully designed**, **simple to use** and **highly scalable**, it has become a **key component** in our API first development strategy and is driving many automations and services such as our Virtual TAC Engineer._"
"_თუ ვინმე აპირებს შექმნას Python-ზე დაფუძნებული, წარმოებაში ჩასაშვებად ვარგისი API-ი, **FastAPI**-ის გამოყენებას ვურჩევ. ეს არის **დახვეწილი**, **მარტივად გამოსაყენებელი** და **მასშტაბირებადი** ტექნოლოგია. იგი გახდა API-ების შემუშავების ჩვენეული სტრატეგიის **ქვაკუთხედი** და სწორედ მისი გამოყენებითაა შემუშავებული ჩვენი არაერთი ავტომატიზაციის სისტემა და სერვისები, მათ შორის ჩვენი ვირტუალური TAC ინჟინერი._"
"_თუ ვინმე აპირებს Python-ზე დაფუძნებული, წარმოებაში ჩასაშვებად ვარგისი API-ი შექმნას, **FastAPI**-ის გამოყენებას ვურჩევ. იგი არის **დახვეწილი**, **მარტივად გამოსაყენებელი** და **მასშტაბირებადი** ტექნოლოგია. იგი გახდა API-ების შემუშავების ჩვენეული სტრატეგიის **ქვაკუთხედი** და სწორედ მისი გამოყენებითაა შემუშავებული ჩვენი არაერთი ავტომატიზაციის სისტემა და სერვისები, მათ შორის ჩვენი ვირტუალური TAC ინჟინერი._"
If you are building a <abbrtitle="Command Line Interface">CLI</abbr> app to be used in the terminal instead of a web API, check out <ahref="https://typer.tiangolo.com/"class="external-link"target="_blank">**Typer**</a>.
თუკი მუშაობთ <abbrtitle="ბრძანებათა სტრიქონი">CLI</abbr> აპლიკაციაზე, რომელიც გამოყენებულ იქნება ტერმინალში ვებ API-ის ნაცვლად, გაეცანით <ahref="https://typer.tiangolo.com/"class="external-link"target="_blank">**Typer**-ს</a>.
თუკი მუშაობთ <abbrtitle="ბრძანებათა სტრიქონი">CLI</abbr> აპლიკაციაზე, რომელიც გამოყენებულ იქნება ტერმინალში ვებ API-ის ნაცვლად, თვალი შეავლეთ <ahref="https://typer.tiangolo.com/"class="external-link"target="_blank">**Typer**-ს</a>.
**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀
**Typer**-ი არის FastAPI-ის პატარა ძამიკო. მისი დანიშნულებაა, იყოს **ბრძანებათა სტრიქონის FastAPI**. ⌨️ 🚀
**Typer**-ი არის FastAPI-ის პატარა ძამიკო. მისი დანიშნულებაა, იყოს **FastAPI ბრძანებათა სტრიქონისათვის**. ⌨️ 🚀
## Requirements
## მოთხოვნები
FastAPI stands on the shoulders of giants:
FastAPI მხრებზე შემოსდგომია შემდეგ გიგანტებს:
FastAPI მხრებზე შემოსდგომია ისეთ გიგანტებს, როგორებიცაა:
* <ahref="https://www.starlette.io/"class="external-link"target="_blank">Starlette</a> for the web parts.
* <ahref="https://www.starlette.io/"class="external-link"target="_blank">Starlette</a>: ვების ნაწილში.
* <ahref="https://docs.pydantic.dev/"class="external-link"target="_blank">Pydantic</a> for the data parts.
* <ahref="https://docs.pydantic.dev/"class="external-link"target="_blank">Pydantic</a>: მონაცემების ნაწილში.
If you don't know, check the _"In a hurry?"_ section about <ahref="https://fastapi.tiangolo.com/async/#in-a-hurry"target="_blank">`async` and `await` in the docs</a>.
თუკი ჯერ ვერ ერკვევით აღნიშნულ საკითხში, <ahref="https://fastapi.tiangolo.com/async/#in-a-hurry"target="_blank">`async`-ისა და `await`-ის შესახებ</a> დოკუმენტაციაში გადახედეთ განყოფილებას სათაურით: _„გეჩქარებათ?“_.
თუ თქვენ ჯერ ვერ ერკვევით აღნიშნულ საკითხში, <ahref="https://fastapi.tiangolo.com/async/#in-a-hurry"target="_blank">`async`-ისა და `await`-ის შესახებ</a> დოკუმენტაციაში გადახედეთ განყოფილებას, სათაურით: _„გეჩქარებათ?“_.
<summary>About the command <code>fastapi dev main.py</code>...</summary>
<summary><code>fastapi dev main.py</code> ბრძანების შესახებ...</summary>
The command `fastapi dev` reads your `main.py` file, detects the **FastAPI** app in it, and starts a server using <ahref="https://www.uvicorn.org"class="external-link"target="_blank">Uvicorn</a>.
`fastapi dev` ბრძანება კითხულობს თქვენს `main.py` ფაილს, მასში **FastAPI** აპლიკაციას აიდენტიფიცირებს და <ahref="https://www.uvicorn.org"class="external-link"target="_blank">Uvicorn</a>-ის გამოყენებით უშვებს სერვერს.
By default, `fastapi dev` will start with auto-reload enabled for local development.
ნაგულისხმევად, ლოკალური დეველოპმენტისთვის, `fastapi dev` ბრძანებით გაშვებული სერვერისთვის აქტივირებული იქნება ავტოგადატვირთვის ფუნქცია.
You can read more about it in the <ahref="https://fastapi.tiangolo.com/fastapi-cli/"target="_blank">FastAPI CLI docs</a>.
ამ საკითხთან დაკავშირებით დამატებითი ინფორმაცია შეგიძლიათ წაიკითხოთ <ahref="https://fastapi.tiangolo.com/fastapi-cli/"target="_blank">FastAPI CLI-ის დოკუმენტაციაში</a>.
</details>
### Check it
### შევამოწმოთ
Open your browser at <ahref="http://127.0.0.1:8000/items/5?q=somequery"class="external-link"target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
თქვენს ბრაუზერში გახსენით შემდეგი ბმული: <ahref="http://127.0.0.1:8000/items/5?q=somequery"class="external-link"target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
You will see the JSON response as:
დაინახავთ JSON ფორმატის მქონე მონაცემს:
```JSON
{"item_id": 5, "q": "somequery"}
```
You already created an API that:
ამგვარად, თქვენ უკვე შექმენით API, რომელიც:
* Receives HTTP requests in the _paths_`/` and `/items/{item_id}`.
* იღებს HTTP მოთხოვნებს შემდეგ _მისამართებზე_: `/` და `/items/{item_id}`.
* Both _paths_ take `GET`<em>operations</em> (also known as HTTP _methods_).
* ორივე _მისამართი_ ამუშავებს `GET`<em>ოპერაციას</em> (ასევე ცნობილს, როგორც HTTP _მეთოდი_).
* The _path_`/items/{item_id}` has a _path parameter_`item_id` that should be an `int`.
* `/items/{item_id}`_მისამართს_ გააჩნია _მარშრუტის პარამეტრი_`item_id`, რომელიც უნდა იყოს მთელი რიცხვის (`int`) ტიპის.
* The _path_`/items/{item_id}` has an optional `str`_query parameter_`q`.
* `/items/{item_id}` მისამართს გააჩნია არასავალდებულო სტრიქონის (`str`) ტიპის _საძიებო (query) პარამეტრი_`q`.
### Interactive API docs
### ინტერაქციული API დოკუმენტაცია
Now go to <ahref="http://127.0.0.1:8000/docs"class="external-link"target="_blank">http://127.0.0.1:8000/docs</a>.
გახსენით თქვენი ბრაუზერი და შედით ბმულზე: <ahref="http://127.0.0.1:8000/docs"class="external-link"target="_blank">http://127.0.0.1:8000/docs</a>.
You will see the automatic interactive API documentation (provided by <ahref="https://github.com/swagger-api/swagger-ui"class="external-link"target="_blank">Swagger UI</a>):
დაინახავთ ავტომატურად გენერირებულ ინტერაქციულ API დოკუმენტაციას (რომელიც უზრუნველყოფილია <ahref="https://github.com/swagger-api/swagger-ui"class="external-link"target="_blank">Swagger UI</a>-ის მიერ):
And now, go to <ahref="http://127.0.0.1:8000/redoc"class="external-link"target="_blank">http://127.0.0.1:8000/redoc</a>.
ბრაუზერში გახსენით შემდეგი ბმული: <ahref="http://127.0.0.1:8000/redoc"class="external-link"target="_blank">http://127.0.0.1:8000/redoc</a>.
You will see the alternative automatic documentation (provided by <ahref="https://github.com/Rebilly/ReDoc"class="external-link"target="_blank">ReDoc</a>):
დაინახავთ ალტერნატიულ ავტომატურად გენერირებულ დოკუმენტაციას (რომელიც უზრუნველყოფილია <ahref="https://github.com/Rebilly/ReDoc"class="external-link"target="_blank">ReDoc</a>-ის მიერ):
* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:
* შემდგომ ამისა, დააკლიკეთ "Execute" ღილაკს, რითაც თქვენ მიერ გახსნილი ინტერფეისი დაუკავშირდება API-ს, გაგზავნის თქვენ მიერ განსაზღვრულ პარამეტრებს, მიიღებს მოთხოვნის შედეგებს და გამოიტანს ეკრანზე:
* შემდგომ ამისა, დააკლიკეთ „Execute“ ღილაკს, რითაც თქვენ მიერ გახსნილი ინტერფეისი დაუკავშირდება API-ს, გაგზავნის თქვენ მიერ განსაზღვრულ პარამეტრებს, მიიღებს მოთხოვნის შედეგებს და გამოიტანს ეკრანზე:
And now, go to <ahref="http://127.0.0.1:8000/redoc"class="external-link"target="_blank">http://127.0.0.1:8000/redoc</a>.
ახლა კი, თქვენს ბრაუზერში გახსენით შემდეგი ბმული: <ahref="http://127.0.0.1:8000/redoc"class="external-link"target="_blank">http://127.0.0.1:8000/redoc</a>.
* The alternative documentation will also reflect the new query parameter and body:
* ახლად დამატებული საძიებო პარამეტრი და შიგთავსის პროტოტიპი ალტერნატიულ დოკუმენტაციაშიც აისახება:
* ახლად დამატებული საძიებო პარამეტრი და შიგთავსის პროტოტიპი ალტერნატიულ დოკუმენტაციაშიც ჰპოვებს ასახვას:
In summary, you declare **once** the types of parameters, body, etc. as function parameters.
მაშასადამე, პარამეტრების, შიგთავსის პროტოტიპებისა და სხვა ტიპების დეკლარირებას ახორციელებთ **ერთჯერადად**. როგორც ეს ხდება ფუნქციისათვის პარამეტრების განსაზღვრისას.
ამრიგად, პარამეტრების, შიგთავსის პროტოტიპებისა და სხვა ტიპების დეკლარირებას ახორციელებთ **ერთჯერადად**. როგორც ფუნქციისათვის პარამეტრების განსაზღვრისას ხდება.
You do that with standard modern Python types.
ამას აკეთებთ Python-ის თანამედროვე, სტანდარტული ტიპების გამოყენებით.
You don't have to learn a new syntax, the methods or classes of a specific library, etc.
არ გჭირდებათ რომელიმე ცალკეული ბიბლიოთეკისთვის დამახასიათებელი თავისებური სინტაქსის, მეთოდების ან კლასების შესწავლა.
არ გჭირდებათ რომელიმე ცალკეული ბიბლიოთეკისთვის დამახასიათებელი განსხვავებული სინტაქსის, მეთოდების ან კლასების შესწავლა.
Just standard **Python**.
იყენებთ მხოლოდ და მხოლოდ სტანდარტულ **Python**-ს.
For example, for an `int`:
მაგალითად, `int`-ის შემთხვევაში:
მაგალითისათვის, `int`-ის შემთხვევაში:
```Python
item_id: int
```
or for a more complex `Item` model:
ან შედარებით რთული `Item` მოდელისთვის:
```Python
item: Item
```
...and with that single declaration you get:
...და ამ ერთი დეკლარაციით თქვენ მიიღებთ:
* Editor support, including:
* Completion.
* Type checks.
* რედაქტორის მხარდაჭერას. მათ შორის:
* კოდის ავტოდასრულებას.
* ტიპთა ვალიდურობის შემოწმებას.
* Validation of data:
* Automatic and clear errors when the data is invalid.
* Validation even for deeply nested JSON objects.
* მონაცემთა ვალიდაციას:
* ავტომატურად გენერირებულ და მარტივად გასაგებ ცდომილების შეტყობინებებს, როდესაც მონაცემები ვალიდური არ იქნება.
* ვალიდაციას თუნდაც უკიდურესად კომპლექსური (მაგ.: მრავალშრიანი) JSON მონაცემებისათვის.
* <abbrtitle="also known as: serialization, parsing, marshalling">Conversion</abbr> of input data: coming from the network to Python data and types. Reading from:
* JSON.
* Path parameters.
* Query parameters.
* Cookies.
* Headers.
* Forms.
* Files.
* შემავალ მონაცემთა <abbrtitle="ასევე ცნობილია, როგორც: სერიალიზება, პარსირება, კლასიფიცირება">გარდაქმნას</abbr>: ქსელიდან შემომავალი მონაცემების გადათარგმნას Python-ისთვის გასაგებ მონაცემებად და ტიპებად. შესაძლებელია შემდეგი სახის მონაცემების წაკითხვა და გარდაქმნა:
* JSON.
* მარშრუტის (Path) პარამეტრები.
@ -490,200 +371,131 @@ item: Item
* თავსართები (Headers).
* ფორმები.
* ფაილები.
* <abbrtitle="also known as: serialization, parsing, marshalling">Conversion</abbr> of output data: converting from Python data and types to network data (as JSON):
* გამომავალ მონაცემთა <abbrtitle="ასევე ცნობილია, როგორც: სერიალიზება, პარსირება, კლასიფიცირება">გარდაქმნას</abbr>: Python-ის მონაცემებისა და ტიპების გადათარგმნას ქსელურ მონაცემებად (JSON-ად). შესაძლებელია შემდეგი სახის მონაცემების გარდაქმნა:
* Python-ის ტიპები (`str`, `int`, `float`, `bool`, `list` და სხვ.).
* `datetime` ობიექტები.
* `UUID` ობიექტები.
* მონაცემთა ბაზის მოდელები.
* ...და მრავალი სხვა.
* Automatic interactive API documentation, including 2 alternative user interfaces:
* Swagger UI.
* ReDoc.
* ავტომატურად გენერირებულ ინტერაქციულ API დოკუმენტაციას, რომელიც მოიცავს 2 ალტერნატიულ ინტერფეისს. ესენია:
* Swagger UI.
* ReDoc.
---
Coming back to the previous code example, **FastAPI** will:
მოდით, მივუბრუნდეთ წინა მაგალითს და გავაანალიზოთ, რას და როგორ გააკეთებს **FastAPI**:
* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.
* `GET` და `PUT` ოპერაციებისათვის შეამოწმებს, არის თუ არა `item_id` პარამეტრი მითითებული მისამართში.
* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.
* If it is not, the client will see a useful, clear error.
* `GET` და `PUT` ოპერაციებისათვის გადაამოწმებს, არის თუ არა `item_id` პარამეტრი `int` ტიპის.
* თუ ეს ასე არ იქნება, კლიენტი იხილავს გამოსადეგ, მარტივად გასაგებ ცდომილების შეტყობინებას.
* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.
* As the `q` parameter is declared with `= None`, it is optional.
* Without the `None` it would be required (as is the body in the case with `PUT`).
* `GET` ოპერაციებისათვის შეამოწმებს, არის თუ არა მისამართში წარმოდგენილი არასავალდებულო საძიებო (query) პარამეტრი, სახელად `q` (მაგ.: `http://127.0.0.1:8000/items/foo?q=somequery`).
* ვინაიდან `q` პარამეტრი კოდში განსაზღვრულია `= None` ბოლოსართით, იგი არასავალდებულოა.
* `None`-ის არარსებობის შემთხვევაში, იგი იქნებოდა სავალდებულო (მსგავსად მოთხოვნის შიგთავსისა `PUT` ოპერაციის შემთხვევაში).
* For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
* Check that it has a required attribute `name` that should be a `str`.
* Check that it has a required attribute `price` that has to be a `float`.
* Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
* All this would also work for deeply nested JSON objects.
* `/items/{item_id}` მისამართზე `PUT` ოპერაციისას, წაიკითხავს მოთხოვნის შიგთავსს, როგორც JSON ფორმატის მქონე მონაცემს. ამასთან:
* შეამოწმებს, არის თუ არა განსაზღვრული `str` ტიპის სავალდებულო `name` ატრიბუტი.
* შეამოწმებს, არის თუ არა განსაზღვრული `float` ტიპის სავალდებულო `price` ატრიბუტი.
* შეამოწმებს, მოთხოვნის შიგთავსში არის თუ არა წარმოდგენილი `bool` ტიპის არასავალდებულო `is_offer` ატრიბუტი.
* ყველაფერი ეს იმუშავებს ნებისმიერი სახის (მაგ.: მრავალშრიანი) JSON მონაცემისათვის.
* Convert from and to JSON automatically.
* ავტომატურად გარდაქმნის JSON-ს სხვა სახის მონაცემად და პირიქით.
* Document everything with OpenAPI, that can be used by:
* Interactive documentation systems.
* Automatic client code generation systems, for many languages.
* ავტომატურად გარდაქმნის JSON-ს სხვა ფორმატის მქონე მონაცემად და პირიქით.
* OpenAPI-ით მოახდენს ყველაფრის დოკუმენტირებას, რაც გამოსადეგი იქნება:
* ინტერაქციული დოკუმენტაციის სისტემებისათვის.
* კლიენტის კოდის ავტომატიზირებული გენერირების სისტემებისათვის სხვადასხვა ენაში.
* Provide 2 interactive documentation web interfaces directly.
* უშუალოდ უზრუნველყოფს 2 ალტერნატიული ინტერაქციული დოკუმენტაციის ვებინტერფეისის არსებობას.
---
We just scratched the surface, but you already get the idea of how it all works.
ჯერჯერობით ჩვენ რაც განვიხილეთ, მხოლოდ და მხოლოდ ზედაპირია აისბერგისა, მაგრამ, ასე თუ ისე, ალბათ გაიაზრეთ ზოგადი პრინციპი, თუ როგორ მუშაობს ეს ყველაფერი.
ჯერჯერობით ჩვენ რაც განვიხილეთ, მხოლოდ და მხოლოდ ზედაპირია აისბერგისა, მაგრამ, ასე თუ ისე, ალბათ გაიაზრეთ ამ ყველაფრის მუშაობის ზოგადი პრინციპი.
For a more complete example including more features, see the <ahref="https://fastapi.tiangolo.com/tutorial/">Tutorial - User Guide</a>.
მეტად სრულყოფილი მაგალითის სანახავად, სადაც განხილული იქნება უფრო მეტი საკითხი, იხილეთ <ahref="https://fastapi.tiangolo.com/tutorial/">სახელმძღვანელო — მომხმარებლის გზამკვლევი</a>.
**Spoiler alert**: the tutorial - user guide includes:
**გაფრთხილება სპოილერის შესახებ**: მომხმარებლის გზამკვლევი მოიცავს შემდეგ საკითხებს:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**.
* **პარამეტრების** დეკლარირება სხვა წყაროებიდან, როგორებიცაა: **თავსართები (headers)**, **cookie-ები**, **ფორმის ველები** და **ფაილები**.
* How to set **validation constraints** as `maximum_length` or `regex`.
* **შემმოწმებლებისათვის (ვალიდატორებისათვის) შეზღუდვების** დაწესება, როგორებიცაა: `maximum_length` ან `regex`.
* A very powerful and easy to use **<abbrtitle="also known as components, resources, providers, services, injectables">Dependency Injection</abbr>** system.
* ძალიან მძლავრი და მარტივად გამოსაყენებელი **<abbrtitle="ასევე ცნობილი, როგორც კომპონენტები, რესურსები, პროვაიდერები, სერვისები, injectable-ები">პაკეტების ინექცირების</abbr>** სისტემა.
* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.
* უსაფრთხოება და ავთენტიკაცია, მათ შორის **OAuth2**-ის მხარდაჭერა **JWT ტოკენებით** და **HTTP Basic** ავთენტიკაცია.
* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).
* მეტად სიღრმისეული (მაგრამ ისეთივე მარტივი) მეთოდოლოგიები **კომპლექსური (მრავალშრიანი) JSON მოდელების** დეკლარირებისათვის (მადლობა Pydantic-ს).
* **GraphQL** integration with <ahref="https://strawberry.rocks"class="external-link"target="_blank">Strawberry</a> and other libraries.
* **GraphQL**-ის ინტეგრირება <ahref="https://strawberry.rocks"class="external-link"target="_blank">Strawberry</a>-სთან და სხვა ბიბლიოთეკებთან.
* Many extra features (thanks to Starlette) as:
* **WebSockets**
* extremely easy tests based on HTTPX and `pytest`
* **CORS**
* **Cookie Sessions**
* ...and more.
* არაერთი სხვა თავისებურება (მადლობა Starlette-ს), როგორებიცაა:
* **GraphQL**-ის ინტეგრირება <ahref="https://strawberry.rocks"class="external-link"target="_blank">Strawberry</a>-სთან და სხვა ბიბლიოთეკებთან ერთად.
* არაერთი სხვა ფუნქციონალი (მადლობა Starlette-ს), როგორებიცაა:
* **ვებსოკეტები**
* HTTPX-ზე და `pytest`-ზე დაფუძნებული უმარტივესი ტესტები
* **CORS**
* **Cookie სესიები**
* ...და მრავალი სხვა.
## Performance
## წარმადობა
Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as <ahref="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7"class="external-link"target="_blank">one of the fastest Python frameworks available</a>, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)
TechEmpower-ის მიუკერძოებელი ტესტები ცხადყოფენ, რომ Uvicorn-ით გაშვებული **FastAPI**-ზე დაფუძნებული აპლიკაციები <ahref="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7"class="external-link"target="_blank">წარმოაჩენენ FastAPI-ს, როგორც ერთ-ერთ უსწრაფეს ფრეიმვორქს Python-ის არსებულ ფრეიმვორქებს შორის</a>. მას წინ უსწრებენ მხოლოდ Starlette-ი და Uvicorn-ი (რომლებსაც, თავის მხრივ, FastAPI-ი იყენებს). (*)
To understand more about it, see the section <ahref="https://fastapi.tiangolo.com/benchmarks/"class="internal-link"target="_blank">Benchmarks</a>.
ამ ყველაფრის უკეთ გასააზრებლად იხილეთ შემდეგი განყოფილება: <ahref="https://fastapi.tiangolo.com/benchmarks/"class="internal-link"target="_blank">წარმადობის ტესტები (Benchmarks)</a>.
## Dependencies
## პაკეტები
Used by Pydantic:
Pydantic-ის მიერ გამოიყენება:
Pydantic-ის მიერ გამოიყენება შემდეგი პაკეტები:
* <ahref="https://github.com/JoshData/python-email-validator"target="_blank"><code>email_validator</code></a> - for email validation.
* <ahref="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/"target="_blank"><code>pydantic-extra-types</code></a> - for extra types to be used with Pydantic.
* <ahref="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/"target="_blank"><code>pydantic-extra-types</code></a> - Pydantic-თან ერთად გამოყენებადი დამატებითი ტიპებისათვის.
* <ahref="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/"target="_blank"><code>pydantic-extra-types</code></a> — Pydantic-თან ერთად გამოყენებადი დამატებითი ტიპებისათვის.
Used by Starlette:
Starlette-ის მიერ გამოიყენება:
Starlette-ის მიერ გამოიყენება შემდეგი პაკეტები:
* <ahref="https://www.python-httpx.org"target="_blank"><code>httpx</code></a> - Required if you want to use the `TestClient`.
* <ahref="https://www.python-httpx.org"target="_blank"><code>httpx</code></a> - სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ `TestClient`-ი .
* <ahref="https://jinja.palletsprojects.com"target="_blank"><code>jinja2</code></a> - Required if you want to use the default template configuration.
* <ahref="https://jinja.palletsprojects.com"target="_blank"><code>jinja2</code></a> - სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ შაბლონის ნაგულისხმევი კონფიგურაცია.
* <ahref="https://github.com/Kludex/python-multipart"target="_blank"><code>python-multipart</code></a> - Required if you want to support form <abbrtitle="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>, with `request.form()`.
* <ahref="https://github.com/Kludex/python-multipart"target="_blank"><code>python-multipart</code></a> - სავალდებულოა, თუკი გსურთ, რომ გქონდეთ ფორმების <abbrtitle="HTTP მოთხოვნიდან შემომავალი მონაცემების კონვერტირება Python-ისთვის გასაგებ მონაცემებად">„პარსინგის“</abbr> შესაძლებლობა `request.form()`-ის გამოყენებით.
* <ahref="https://www.python-httpx.org"target="_blank"><code>httpx</code></a> — სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ `TestClient`-ი .
* <ahref="https://jinja.palletsprojects.com"target="_blank"><code>jinja2</code></a> — სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ შაბლონის ნაგულისხმევი კონფიგურაცია.
* <ahref="https://github.com/Kludex/python-multipart"target="_blank"><code>python-multipart</code></a> — სავალდებულოა, თუკი გსურთ, რომ გქონდეთ ფორმების <abbrtitle="HTTP მოთხოვნიდან შემომავალი მონაცემების კონვერტირება Python-ისთვის გასაგებ მონაცემებად">„პარსინგის“</abbr> შესაძლებლობა `request.form()`-ის გამოყენებით.
Used by FastAPI / Starlette:
FastAPI / Starlette-ის მიერ გამოიყენება:
FastAPI / Starlette-ის მიერ გამოიყენება შემდეგი პაკეტები:
* <ahref="https://www.uvicorn.org"target="_blank"><code>uvicorn</code></a> - for the server that loads and serves your application.
* <ahref="https://www.uvicorn.org"target="_blank"><code>uvicorn</code></a> - სერვერისთვის, რომელიც ემსახურება თქვენი აპლიკაციის ჩატვირთვას და მუშაობას.
* `fastapi-cli` - to provide the `fastapi` command.
* `fastapi-cli` - უზრუნველყოფს `fastapi` ბრძანების ხელმისაწვდომობას.
* <ahref="https://www.uvicorn.org"target="_blank"><code>uvicorn</code></a> — სერვერისთვის, რომელიც ემსახურება თქვენი აპლიკაციის ჩატვირთვას და მუშაობას.
* `fastapi-cli` — უზრუნველყოფს `fastapi` ბრძანების ხელმისაწვდომობას.
When you install `fastapi` it comes these standard dependencies.
`fastapi`-ის ინსტალირებისას, მასთან ერთად ინსტალირდება ზემოთ ჩამოთვლილი სტანდარტული პაკეტებიც.
Additional optional dependencies:
დამატებითი არასავალდებულო პაკეტები:
დამატებითი არასავალდებულო პაკეტები გახლავთ:
* <ahref="https://github.com/ijl/orjson"target="_blank"><code>orjson</code></a> - Required if you want to use `ORJSONResponse`.
* <ahref="https://github.com/ijl/orjson"target="_blank"><code>orjson</code></a> - სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ `ORJSONResponse`-ი.
* <ahref="https://github.com/esnme/ultrajson"target="_blank"><code>ujson</code></a> - Required if you want to use `UJSONResponse`.
* <ahref="https://github.com/esnme/ultrajson"target="_blank"><code>ujson</code></a> - სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ `UJSONResponse`-ი.
* <ahref="https://github.com/ijl/orjson"target="_blank"><code>orjson</code></a> — სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ `ORJSONResponse`-ი.
* <ahref="https://github.com/esnme/ultrajson"target="_blank"><code>ujson</code></a> — სავალდებულოა, თუკი გსურთ, რომ გამოიყენოთ `UJSONResponse`-ი.
## `fastapi-slim`
If you don't want the extra standard optional dependencies, install `fastapi-slim` instead.
თუ არ გჭირდებათ დამატებითი არასავალდებულო სტანდარტული პაკეტები, `fastapi`-ის ნაცვლად დააინსტალირეთ `fastapi-slim`-ი.
When you install with:
როდესაც ინსტალაციას ახორციელებთ შემდეგი ბრძანებით:
```bash
pip install fastapi
```
...it includes the same code and dependencies as:
...ინსტალირდება იგივე კოდი და პაკეტები, რაც დაინსტალირდებოდა შემდეგი ბრძანების გამოყენების შემთხვევაში:
```bash
pip install "fastapi-slim[standard]"
```
The standard extra dependencies are the ones mentioned above.
არასავალდებულო სტანდარტულ პაკეტებში იგულისხმება ზემოთ ნახსენები პაკეტები.
არასავალდებულო სტანდარტულ პაკეტებში იგულისხმება ზემოთ მოხსენიებული პაკეტები.
## License
## ლიცენზია
This project is licensed under the terms of the MIT license.
წინამდებარე პროექტზე ვრცელდება MIT ლიცენზიით გათვალისწინებული წესები და პირობები.