diff --git a/docs/pt/docs/_llm-test.md b/docs/pt/docs/_llm-test.md index 9f03c4b886..d5df9dd8bf 100644 --- a/docs/pt/docs/_llm-test.md +++ b/docs/pt/docs/_llm-test.md @@ -11,7 +11,7 @@ Use da seguinte forma: * Verifique se está tudo certo na tradução. * Se necessário, melhore seu prompt específico do idioma, o prompt geral ou o documento em inglês. * Em seguida, corrija manualmente os problemas restantes na tradução, para que fique uma boa tradução. -* Retraduzir, tendo a boa tradução no lugar. O resultado ideal seria que o LLM não fizesse mais mudanças na tradução. Isso significa que o prompt geral e o seu prompt específico do idioma estão tão bons quanto possível (às vezes fará algumas mudanças aparentemente aleatórias, a razão é que LLMs não são algoritmos determinísticos). +* Retraduzir, tendo a boa tradução no lugar. O resultado ideal seria que o LLM não fizesse mais mudanças na tradução. Isso significa que o prompt geral e o seu prompt específico do idioma estão tão bons quanto possível (às vezes fará algumas mudanças aparentemente aleatórias, a razão é que [LLMs não são algoritmos determinísticos](https://doublespeak.chat/#/handbook#deterministic-output)). Os testes: @@ -169,15 +169,15 @@ Veja as seções `### Special blocks` e `### Tab blocks` no prompt geral em `scr O texto do link deve ser traduzido, o endereço do link deve permanecer inalterado: * [Link para o título acima](#code-snippets) -* [Link interno](index.md#installation){.internal-link target=_blank} -* Link externo -* Link para um estilo -* Link para um script -* Link para uma imagem +* [Link interno](index.md#installation) +* [Link externo](https://sqlmodel.tiangolo.com/) +* [Link para um estilo](https://fastapi.tiangolo.com/css/styles.css) +* [Link para um script](https://fastapi.tiangolo.com/js/logic.js) +* [Link para uma imagem](https://fastapi.tiangolo.com/img/foo.jpg) O texto do link deve ser traduzido, o endereço do link deve apontar para a tradução: -* Link do FastAPI +* [Link do FastAPI](https://fastapi.tiangolo.com/pt/) //// diff --git a/docs/pt/docs/alternatives.md b/docs/pt/docs/alternatives.md index 17ef260dd4..828561542d 100644 --- a/docs/pt/docs/alternatives.md +++ b/docs/pt/docs/alternatives.md @@ -14,7 +14,7 @@ Mas em algum momento, não havia outra opção senão criar algo que fornecesse ## Ferramentas anteriores { #previous-tools } -### Django { #django } +### [Django](https://www.djangoproject.com/) { #django } É o framework Python mais popular e amplamente confiável. É utilizado para construir sistemas como o Instagram. @@ -22,7 +22,7 @@ Mas em algum momento, não havia outra opção senão criar algo que fornecesse Foi criado para gerar o HTML no backend, não para criar APIs usadas por um frontend moderno (como React, Vue.js e Angular) ou por outros sistemas (como dispositivos IoT) comunicando com ele. -### Django REST Framework { #django-rest-framework } +### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework } Django REST framework foi criado para ser uma caixa de ferramentas flexível para construção de APIs Web utilizando Django por baixo, para melhorar suas capacidades de API. @@ -36,13 +36,13 @@ Django REST Framework foi criado por Tom Christie. O mesmo criador de Starlette /// -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Ter uma interface web de documentação automática da API. /// -### Flask { #flask } +### [Flask](https://flask.palletsprojects.com) { #flask } Flask é um "microframework", não inclui integrações com banco de dados nem muitas das coisas que vêm por padrão no Django. @@ -56,7 +56,7 @@ Esse desacoplamento de partes, e ser um "microframework" que pode ser estendido Dada a simplicidade do Flask, ele parecia uma boa opção para construção de APIs. A próxima coisa a encontrar era um "Django REST Framework" para Flask. -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Ser um microframework. Tornar fácil misturar e combinar as ferramentas e partes necessárias. @@ -64,7 +64,7 @@ Ter um sistema de roteamento simples e fácil de usar. /// -### Requests { #requests } +### [Requests](https://requests.readthedocs.io) { #requests } **FastAPI** na verdade não é uma alternativa ao **Requests**. O escopo deles é muito diferente. @@ -98,7 +98,7 @@ def read_url(): Veja as similaridades em `requests.get(...)` e `@app.get(...)`. -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a * Ter uma API simples e intuitiva. * Utilizar nomes de métodos HTTP (operações) diretamente, de um jeito direto e intuitivo. @@ -106,7 +106,7 @@ Veja as similaridades em `requests.get(...)` e `@app.get(...)`. /// -### Swagger / OpenAPI { #swagger-openapi } +### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi } A principal funcionalidade que eu queria do Django REST Framework era a documentação automática da API. @@ -118,14 +118,14 @@ Em algum ponto, Swagger foi doado para a Fundação Linux, para ser renomeado Op É por isso que ao falar sobre a versão 2.0 é comum dizer "Swagger", e para a versão 3+ "OpenAPI". -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Adotar e usar um padrão aberto para especificações de API, em vez de um schema personalizado. E integrar ferramentas de interface para usuários baseadas nos padrões: -* Swagger UI -* ReDoc +* [Swagger UI](https://github.com/swagger-api/swagger-ui) +* [ReDoc](https://github.com/Rebilly/ReDoc) Essas duas foram escolhidas por serem bem populares e estáveis, mas fazendo uma pesquisa rápida, você pode encontrar dúzias de interfaces alternativas adicionais para OpenAPI (que você pode utilizar com **FastAPI**). @@ -135,7 +135,7 @@ Essas duas foram escolhidas por serem bem populares e estáveis, mas fazendo uma Existem vários Flask REST frameworks, mas depois de investir tempo e trabalho investigando-os, descobri que muitos estão descontinuados ou abandonados, com diversas questões em aberto que os tornaram inadequados. -### Marshmallow { #marshmallow } +### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } Uma das principais funcionalidades necessárias em sistemas de API é a "serialização" de dados, que é pegar dados do código (Python) e convertê-los em algo que possa ser enviado pela rede. Por exemplo, converter um objeto contendo dados de um banco de dados em um objeto JSON. Converter objetos `datetime` em strings, etc. @@ -147,13 +147,13 @@ Essas funcionalidades são o que o Marshmallow foi construído para fornecer. É Mas ele foi criado antes de existirem as anotações de tipo do Python. Então, para definir cada schema você precisa utilizar utilitários e classes específicos fornecidos pelo Marshmallow. -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Usar código para definir "schemas" que forneçam, automaticamente, tipos de dados e validação. /// -### Webargs { #webargs } +### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs } Outra grande funcionalidade requerida pelas APIs é o parsing de dados vindos de requisições de entrada. @@ -169,13 +169,13 @@ Webargs foi criado pelos mesmos desenvolvedores do Marshmallow. /// -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Ter validação automática dos dados de requisições de entrada. /// -### APISpec { #apispec } +### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec } Marshmallow e Webargs fornecem validação, parsing e serialização como plug-ins. @@ -199,13 +199,13 @@ APISpec foi criado pelos mesmos desenvolvedores do Marshmallow. /// -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Dar suporte ao padrão aberto para APIs, OpenAPI. /// -### Flask-apispec { #flask-apispec } +### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec } É um plug-in Flask, que amarra juntos Webargs, Marshmallow e APISpec. @@ -219,11 +219,11 @@ Essa combinação de Flask, Flask-apispec com Marshmallow e Webargs foi a minha Usá-la levou à criação de vários geradores Flask full-stack. Estas são as principais stacks que eu (e várias equipes externas) tenho utilizado até agora: -* https://github.com/tiangolo/full-stack -* https://github.com/tiangolo/full-stack-flask-couchbase -* https://github.com/tiangolo/full-stack-flask-couchdb +* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack) +* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase) +* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb) -E esses mesmos geradores full-stack foram a base dos [Geradores de Projetos **FastAPI**](project-generation.md){.internal-link target=_blank}. +E esses mesmos geradores full-stack foram a base dos [Geradores de Projetos **FastAPI**](project-generation.md). /// info | Informação @@ -231,13 +231,13 @@ Flask-apispec foi criado pelos mesmos desenvolvedores do Marshmallow. /// -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Gerar o schema OpenAPI automaticamente, a partir do mesmo código que define serialização e validação. /// -### NestJS (e Angular) { #nestjs-and-angular } +### [NestJS](https://nestjs.com/) (e [Angular](https://angular.io/)) { #nestjs-and-angular } Isso nem é Python, NestJS é um framework NodeJS em JavaScript (TypeScript) inspirado pelo Angular. @@ -251,7 +251,7 @@ Mas como os dados do TypeScript não são preservados após a compilação para Ele não consegue lidar muito bem com modelos aninhados. Então, se o corpo JSON na requisição for um objeto JSON que contém campos internos que por sua vez são objetos JSON aninhados, ele não consegue ser documentado e validado apropriadamente. -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Usar tipos do Python para ter um ótimo suporte do editor. @@ -259,19 +259,19 @@ Ter um sistema de injeção de dependência poderoso. Encontrar um jeito de mini /// -### Sanic { #sanic } +### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic } Ele foi um dos primeiros frameworks Python extremamente rápidos baseados em `asyncio`. Ele foi feito para ser muito similar ao Flask. /// note | Detalhes Técnicos -Ele utilizava `uvloop` em vez do loop `asyncio` padrão do Python. É isso que o deixava tão rápido. +Ele utilizava [`uvloop`](https://github.com/MagicStack/uvloop) em vez do loop `asyncio` padrão do Python. É isso que o deixava tão rápido. Ele claramente inspirou Uvicorn e Starlette, que atualmente são mais rápidos que o Sanic em benchmarks abertos. /// -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Encontrar um jeito de ter uma performance insana. @@ -279,7 +279,7 @@ Encontrar um jeito de ter uma performance insana. /// -### Falcon { #falcon } +### [Falcon](https://falconframework.org/) { #falcon } Falcon é outro framework Python de alta performance, projetado para ser minimalista, e servir como base para outros frameworks como Hug. @@ -287,7 +287,7 @@ Ele é projetado para ter funções que recebem dois parâmetros, uma "request" Então, validação de dados, serialização e documentação têm que ser feitos no código, não automaticamente. Ou eles têm que ser implementados como um framework acima do Falcon, como o Hug. Essa mesma distinção acontece em outros frameworks inspirados pelo design do Falcon, de ter um objeto de request e um objeto de response como parâmetros. -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Encontrar maneiras de obter uma ótima performance. @@ -297,7 +297,7 @@ Embora no FastAPI seja opcional, é utilizado principalmente para configurar cab /// -### Molten { #molten } +### [Molten](https://moltenframework.com/) { #molten } Eu descobri Molten nos primeiros estágios da construção do **FastAPI**. E ele tem ideias bastante similares: @@ -313,7 +313,7 @@ O sistema de injeção de dependência exige pré-registro das dependências e e As rotas são declaradas em um único lugar, usando funções declaradas em outros lugares (em vez de usar decorators que possam ser colocados diretamente acima da função que lida com o endpoint). Isso é mais próximo de como o Django faz do que de como o Flask (e o Starlette) fazem. Separa no código coisas que são relativamente bem acopladas. -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Definir validações extras para tipos de dados usando o valor "padrão" de atributos dos modelos. Isso melhora o suporte do editor, e não estava disponível no Pydantic antes. @@ -321,7 +321,7 @@ Isso na verdade inspirou a atualização de partes do Pydantic, para dar suporte /// -### Hug { #hug } +### [Hug](https://github.com/hugapi/hug) { #hug } Hug foi um dos primeiros frameworks a implementar a declaração de tipos de parâmetros de API usando anotações de tipo do Python. Isso foi uma ótima ideia que inspirou outras ferramentas a fazer o mesmo. @@ -337,7 +337,7 @@ Como é baseado no padrão anterior para frameworks web Python síncronos (WSGI) /// info | Informação -Hug foi criado por Timothy Crosley, o mesmo criador do `isort`, uma ótima ferramenta para ordenar automaticamente imports em arquivos Python. +Hug foi criado por Timothy Crosley, o mesmo criador do [`isort`](https://github.com/timothycrosley/isort), uma ótima ferramenta para ordenar automaticamente imports em arquivos Python. /// @@ -351,7 +351,7 @@ Hug inspirou **FastAPI** a declarar um parâmetro de `response` em funções par /// -### APIStar (<= 0.5) { #apistar-0-5 } +### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 } Pouco antes de decidir construir o **FastAPI** eu encontrei o servidor **APIStar**. Ele tinha quase tudo o que eu estava procurando e tinha um ótimo design. @@ -385,7 +385,7 @@ APIStar foi criado por Tom Christie. O mesmo cara que criou: /// -/// check | **FastAPI** inspirado para +/// check | Inspirou o **FastAPI** a Existir. @@ -401,7 +401,7 @@ Eu considero o **FastAPI** um "sucessor espiritual" do APIStar, enquanto aprimor ## Usados por **FastAPI** { #used-by-fastapi } -### Pydantic { #pydantic } +### [Pydantic](https://docs.pydantic.dev/) { #pydantic } Pydantic é uma biblioteca para definir validação de dados, serialização e documentação (usando JSON Schema) com base nas anotações de tipo do Python. @@ -417,7 +417,7 @@ Controlar toda a validação de dados, serialização de dados e documentação /// -### Starlette { #starlette } +### [Starlette](https://www.starlette.dev/) { #starlette } Starlette é um framework/caixa de ferramentas ASGI leve, o que é ideal para construir serviços asyncio de alta performance. @@ -462,7 +462,7 @@ Então, qualquer coisa que você pode fazer com Starlette, você pode fazer dire /// -### Uvicorn { #uvicorn } +### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } Uvicorn é um servidor ASGI extremamente rápido, construído com uvloop e httptools. @@ -476,10 +476,10 @@ O principal servidor web para rodar aplicações **FastAPI**. Você também pode usar a opção de linha de comando `--workers` para ter um servidor assíncrono multi-processos. -Verifique mais detalhes na seção [Deployment](deployment/index.md){.internal-link target=_blank}. +Verifique mais detalhes na seção [Implantação](deployment/index.md). /// ## Benchmarks e velocidade { #benchmarks-and-speed } -Para entender, comparar e ver a diferença entre Uvicorn, Starlette e FastAPI, verifique a seção sobre [Benchmarks](benchmarks.md){.internal-link target=_blank}. +Para entender, comparar e ver a diferença entre Uvicorn, Starlette e FastAPI, verifique a seção sobre [Benchmarks](benchmarks.md). diff --git a/docs/pt/docs/async.md b/docs/pt/docs/async.md index f01ff23159..fa1e430036 100644 --- a/docs/pt/docs/async.md +++ b/docs/pt/docs/async.md @@ -4,7 +4,7 @@ Detalhes sobre a sintaxe `async def` para *funções de operação de rota* e al ## Com pressa? { #in-a-hurry } -TL;DR: +TL;DR: Se você estiver utilizando bibliotecas de terceiros que dizem para você chamar as funções com `await`, como: @@ -74,7 +74,7 @@ Então o computador / programa 🤖 irá voltar sempre que tiver uma chance, sej Depois, ele 🤖 pega a primeira tarefa para finalizar (vamos dizer, nosso "arquivo lento" 📝) e continua o que tem que fazer com ela. -Esse "esperar por algo" normalmente se refere a operações I/O que são relativamente "lentas" (comparadas à velocidade do processador e da memória RAM), como esperar por: +Esse "esperar por algo" normalmente se refere a operações I/O que são relativamente "lentas" (comparadas à velocidade do processador e da memória RAM), como esperar por: * dados do cliente para serem enviados através da rede * dados enviados pelo seu programa serem recebidos pelo cliente através da rede @@ -85,7 +85,7 @@ Esse "esperar por algo" normalmente se refere a operações I/O, essas operações são chamadas operações "limitadas por I/O". +Quanto o tempo de execução é consumido majoritariamente pela espera de operações I/O, essas operações são chamadas operações "limitadas por I/O". Isso é chamado de "assíncrono" porque o computador / programa não tem que ser "sincronizado" com a tarefa lenta, esperando pelo momento exato em que a tarefa finaliza, enquanto não faz nada, para ser capaz de pegar o resultado da tarefa e dar continuidade ao trabalho. @@ -141,7 +141,7 @@ Você e seu _crush_ comem os hambúrgueres e aproveitam o tempo. ✨ /// info | Informação -Belas ilustrações de Ketrina Thompson. 🎨 +Belas ilustrações de [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨 /// @@ -207,7 +207,7 @@ Não houve muita conversa ou flerte já que a maior parte do tempo foi gasto esp /// info | Informação -Belas ilustrações de Ketrina Thompson. 🎨 +Belas ilustrações de [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨 /// @@ -251,7 +251,7 @@ Esse tipo de assincronicidade é o que fez NodeJS popular (embora NodeJS não se E esse é o mesmo nível de performance que você tem com o **FastAPI**. -E como você pode ter paralelismo e assincronicidade ao mesmo tempo, você tem uma maior performance do que a maioria dos frameworks NodeJS testados e lado a lado com Go, que é uma linguagem compilada, mais próxima ao C (tudo graças ao Starlette). +E como você pode ter paralelismo e assincronicidade ao mesmo tempo, você tem uma maior performance do que a maioria dos frameworks NodeJS testados e lado a lado com Go, que é uma linguagem compilada, mais próxima ao C [(tudo graças ao Starlette)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1). ### Concorrência é melhor que paralelismo? { #is-concurrency-better-than-parallelism } @@ -277,7 +277,7 @@ Mas nesse caso, se você trouxesse os 8 ex-caixas / cozinheiros / agora-faxineir Nesse cenário, cada um dos faxineiros (incluindo você) poderia ser um processador, fazendo a sua parte do trabalho. -E a maior parte do tempo de execução é tomada por trabalho real (ao invés de ficar esperando), e o trabalho em um computador é feito pela CPU. Eles chamam esses problemas de "limitados por CPU". +E a maior parte do tempo de execução é tomada por trabalho real (ao invés de ficar esperando), e o trabalho em um computador é feito pela CPU. Eles chamam esses problemas de "limitados por CPU". --- @@ -298,7 +298,7 @@ Mas você também pode explorar os benefícios do paralelismo e multiprocessamen Isso, somado ao simples fato que Python é a principal linguagem para **Data Science**, Aprendizado de Máquina e especialmente Deep Learning, faz do FastAPI uma ótima escolha para APIs web e aplicações com Data Science / Aprendizado de Máquina (entre muitas outras). -Para ver como alcançar esse paralelismo em produção veja a seção sobre [Implantação](deployment/index.md){.internal-link target=_blank}. +Para ver como alcançar esse paralelismo em produção veja a seção sobre [Implantação](deployment/index.md). ## `async` e `await` { #async-and-await } @@ -363,13 +363,13 @@ Mas se você quiser usar `async` / `await` sem FastAPI, você também pode fazê ### Escreva seu próprio código assíncrono { #write-your-own-async-code } -Starlette (e **FastAPI**) são baseados no AnyIO, o que o torna compatível com ambos o asyncio da biblioteca padrão do Python, e o Trio. +Starlette (e **FastAPI**) são baseados no [AnyIO](https://anyio.readthedocs.io/en/stable/), o que o torna compatível com ambos o [asyncio](https://docs.python.org/3/library/asyncio-task.html) da biblioteca padrão do Python, e o [Trio](https://trio.readthedocs.io/en/stable/). -Em particular, você pode usar diretamente o AnyIO para seus casos de uso avançados de concorrência que requerem padrões mais avançados no seu próprio código. +Em particular, você pode usar diretamente o [AnyIO](https://anyio.readthedocs.io/en/stable/) para seus casos de uso avançados de concorrência que requerem padrões mais avançados no seu próprio código. -E até se você não estiver utilizando FastAPI, você também pode escrever suas próprias aplicações assíncronas com o AnyIO por ser altamente compatível e ganhar seus benefícios (e.g. *concorrência estruturada*). +E até se você não estiver utilizando FastAPI, você também pode escrever suas próprias aplicações assíncronas com o [AnyIO](https://anyio.readthedocs.io/en/stable/) por ser altamente compatível e ganhar seus benefícios (e.g. *concorrência estruturada*). -Eu criei outra biblioteca em cima do AnyIO, como uma fina camada acima, para melhorar um pouco as anotações de tipo e obter melhor **preenchimento automático**, **erros inline**, etc. Ela também possui uma introdução amigável e um tutorial para ajudar você a **entender** e escrever **seu próprio código async**: Asyncer. Seria particularmente útil se você precisar **combinar código async com código regular** (bloqueador/síncrono). +Eu criei outra biblioteca em cima do AnyIO, como uma fina camada acima, para melhorar um pouco as anotações de tipo e obter melhor **preenchimento automático**, **erros inline**, etc. Ela também possui uma introdução amigável e um tutorial para ajudar você a **entender** e escrever **seu próprio código async**: [Asyncer](https://asyncer.tiangolo.com/). Seria particularmente útil se você precisar **combinar código async com código regular** (bloqueador/síncrono). ### Outras formas de código assíncrono { #other-forms-of-asynchronous-code } @@ -381,7 +381,7 @@ Essa mesma sintaxe (ou quase a mesma) foi também incluída recentemente em vers Mas antes disso, controlar código assíncrono era bem mais complexo e difícil. -Nas versões anteriores do Python, você poderia utilizar threads ou Gevent. Mas o código é bem mais complexo de entender, debugar, e pensar sobre. +Nas versões anteriores do Python, você poderia utilizar threads ou [Gevent](https://www.gevent.org/). Mas o código é bem mais complexo de entender, debugar, e pensar sobre. Nas versões anteriores do NodeJS / Navegador JavaScript, você utilizaria "callbacks". O que leva ao "inferno do callback". @@ -417,17 +417,17 @@ Se você tem certo conhecimento técnico (corrotinas, threads, blocking etc) e e Quando você declara uma *função de operação de rota* com `def` normal ao invés de `async def`, ela é rodada em uma threadpool externa que é então aguardada, ao invés de ser chamada diretamente (já que ela bloquearia o servidor). -Se você está chegando de outro framework assíncrono que não funciona como descrito acima e você está acostumado a definir *funções de operação de rota* triviais somente de computação com simples `def` para ter um mínimo ganho de performance (cerca de 100 nanosegundos), por favor observe que no **FastAPI** o efeito pode ser bem o oposto. Nesses casos, é melhor usar `async def` a menos que suas *funções de operação de rota* utilizem código que performe bloqueamento I/O. +Se você está chegando de outro framework assíncrono que não funciona como descrito acima e você está acostumado a definir *funções de operação de rota* triviais somente de computação com simples `def` para ter um mínimo ganho de performance (cerca de 100 nanosegundos), por favor observe que no **FastAPI** o efeito pode ser bem o oposto. Nesses casos, é melhor usar `async def` a menos que suas *funções de operação de rota* utilizem código que performe bloqueamento I/O. -Ainda, em ambas as situações, as chances são que o **FastAPI** [ainda será mais rápido](index.md#performance){.internal-link target=_blank} do que (ou ao menos comparável a) seu framework anterior. +Ainda, em ambas as situações, as chances são que o **FastAPI** [ainda será mais rápido](index.md#performance) do que (ou ao menos comparável a) seu framework anterior. ### Dependências { #dependencies } -O mesmo se aplica para as [dependências](tutorial/dependencies/index.md){.internal-link target=_blank}. Se uma dependência tem as funções com padrão `def` ao invés de `async def`, ela é rodada no threadpool externo. +O mesmo se aplica para as [dependências](tutorial/dependencies/index.md). Se uma dependência tem as funções com padrão `def` ao invés de `async def`, ela é rodada no threadpool externo. ### Sub-dependências { #sub-dependencies } -Você pode ter múltiplas dependências e [sub-dependências](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} requisitando uma à outra (como parâmetros de definições de funções), algumas delas podem ser criadas com `async def` e algumas com `def` normal. Isso ainda funcionaria, e aquelas criadas com `def` normal seriam chamadas em uma thread externa (do threadpool) ao invés de serem "aguardadas". +Você pode ter múltiplas dependências e [sub-dependências](tutorial/dependencies/sub-dependencies.md) requisitando uma à outra (como parâmetros de definições de funções), algumas delas podem ser criadas com `async def` e algumas com `def` normal. Isso ainda funcionaria, e aquelas criadas com `def` normal seriam chamadas em uma thread externa (do threadpool) ao invés de serem "aguardadas". ### Outras funções de utilidade { #other-utility-functions } diff --git a/docs/pt/docs/benchmarks.md b/docs/pt/docs/benchmarks.md index a54df3d9d5..ac34a4e5e0 100644 --- a/docs/pt/docs/benchmarks.md +++ b/docs/pt/docs/benchmarks.md @@ -1,6 +1,6 @@ # Benchmarks { #benchmarks } -Benchmarks independentes da TechEmpower mostram as aplicações **FastAPI** rodando com Uvicorn como um dos frameworks Python mais rápidos disponíveis, somente atrás dos próprios Starlette e Uvicorn (utilizados internamente pelo FastAPI). +Benchmarks independentes da TechEmpower mostram as aplicações **FastAPI** rodando com Uvicorn como [um dos frameworks Python mais rápidos disponíveis](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), somente atrás dos próprios Starlette e Uvicorn (utilizados internamente pelo FastAPI). Mas quando se checa _benchmarks_ e comparações você deveria ter o seguinte em mente. diff --git a/docs/pt/docs/environment-variables.md b/docs/pt/docs/environment-variables.md index 342361b913..a464beceeb 100644 --- a/docs/pt/docs/environment-variables.md +++ b/docs/pt/docs/environment-variables.md @@ -65,7 +65,7 @@ print(f"Hello {name} from Python") /// tip | Dica -O segundo argumento para `os.getenv()` é o valor padrão a ser retornado. +O segundo argumento para [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) é o valor padrão a ser retornado. Se não for fornecido, é `None` por padrão, Aqui fornecemos `"World"` como o valor padrão a ser usado. @@ -153,7 +153,7 @@ Hello World from Python /// tip | Dica -Você pode ler mais sobre isso em The Twelve-Factor App: Config. +Você pode ler mais sobre isso em [The Twelve-Factor App: Config](https://12factor.net/config). /// @@ -163,7 +163,7 @@ Essas variáveis de ambiente só podem lidar com **strings de texto**, pois são Isso significa que **qualquer valor** lido em Python de uma variável de ambiente **será uma `str`**, e qualquer conversão para um tipo diferente ou qualquer validação precisa ser feita no código. -Você aprenderá mais sobre como usar variáveis de ambiente para lidar com **configurações do aplicativo** no [Guia do Usuário Avançado - Configurações e Variáveis de Ambiente](./advanced/settings.md){.internal-link target=_blank}. +Você aprenderá mais sobre como usar variáveis de ambiente para lidar com **configurações do aplicativo** no [Guia do Usuário Avançado - Configurações e Variáveis de Ambiente](./advanced/settings.md). ## Variável de Ambiente `PATH` { #path-environment-variable } @@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python //// -Essas informações serão úteis ao aprender sobre [Ambientes Virtuais](virtual-environments.md){.internal-link target=_blank}. +Essas informações serão úteis ao aprender sobre [Ambientes Virtuais](virtual-environments.md). ## Conclusão { #conclusion } Com isso, você deve ter uma compreensão básica do que são **variáveis de ambiente** e como usá-las em Python. -Você também pode ler mais sobre elas na Wikipedia para Variáveis de Ambiente. +Você também pode ler mais sobre elas na [Wikipedia para Variáveis de Ambiente](https://en.wikipedia.org/wiki/Environment_variable). Em muitos casos, não é muito óbvio como as variáveis de ambiente seriam úteis e aplicáveis imediatamente. Mas elas continuam aparecendo em muitos cenários diferentes quando você está desenvolvendo, então é bom saber sobre elas. diff --git a/docs/pt/docs/fastapi-cli.md b/docs/pt/docs/fastapi-cli.md index f1e633a236..832b5fefe2 100644 --- a/docs/pt/docs/fastapi-cli.md +++ b/docs/pt/docs/fastapi-cli.md @@ -1,15 +1,15 @@ # FastAPI CLI { #fastapi-cli } -**FastAPI CLI** é um programa de linha de comando que você pode usar para servir sua aplicação FastAPI, gerenciar seu projeto FastAPI e muito mais. +**FastAPI CLI** é um programa de linha de comando que você pode usar para servir sua aplicação FastAPI, gerenciar seu projeto FastAPI e muito mais. -Quando você instala o FastAPI (por exemplo, com `pip install "fastapi[standard]"`), isso inclui um pacote chamado `fastapi-cli`; esse pacote disponibiliza o comando `fastapi` no terminal. +Quando você instala o FastAPI (por exemplo, com `pip install "fastapi[standard]"`), ele vem com um programa de linha de comando que você pode executar no terminal. Para executar sua aplicação FastAPI durante o desenvolvimento, você pode usar o comando `fastapi dev`:
@@ -44,7 +44,7 @@ Eu então dediquei algum tempo projetando a "API" de desenvolvimento que eu quer Eu testei várias ideias nos editores Python mais populares: PyCharm, VS Code, e editores baseados no Jedi. -Pela última Pesquisa do Desenvolvedor Python, isso cobre cerca de 80% dos usuários. +Pela última [Pesquisa do Desenvolvedor Python](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools), isso cobre cerca de 80% dos usuários. Isso significa que o **FastAPI** foi testado especificamente com os editores usados por 80% dos desenvolvedores Python. Como a maioria dos outros editores tendem a funcionar de forma similar, todos os seus benefícios devem funcionar para virtualmente todos os editores. @@ -54,11 +54,11 @@ Tudo de uma forma que oferecesse a melhor experiência de desenvolvimento para t ## Requisitos { #requirements } -Após testar várias alternativas, eu decidi que usaria o **Pydantic** por suas vantagens. +Após testar várias alternativas, eu decidi que usaria o [**Pydantic**](https://docs.pydantic.dev/) por suas vantagens. Então eu contribuí com ele, para deixá-lo completamente de acordo com o JSON Schema, para dar suporte a diferentes maneiras de definir declarações de restrições, e melhorar o suporte a editores (conferências de tipos, preenchimento automático) baseado nos testes em vários editores. -Durante o desenvolvimento, eu também contribuí com o **Starlette**, outro requisito chave. +Durante o desenvolvimento, eu também contribuí com o [**Starlette**](https://www.starlette.dev/), outro requisito chave. ## Desenvolvimento { #development } @@ -68,7 +68,7 @@ Quando comecei a criar o **FastAPI** de fato, a maior parte das peças já estav Nesse ponto, já está claro que o **FastAPI** com suas ideias está sendo útil para muitas pessoas. -Ele foi escolhido sobre outras alternativas anteriores por se adequar melhor em muitos casos. +Ele está sendo escolhido em relação a alternativas anteriores por se adequar melhor em muitos casos. Muitos desenvolvedores e times já dependem do **FastAPI** para seus projetos (incluindo eu e meu time). @@ -76,4 +76,4 @@ Mas ainda há muitas melhorias e funcionalidades a vir. **FastAPI** tem um grande futuro à frente. -E [sua ajuda](help-fastapi.md){.internal-link target=_blank} é muito bem-vinda. +E [sua ajuda](help-fastapi.md) é muito bem-vinda. diff --git a/docs/pt/docs/index.md b/docs/pt/docs/index.md index c337f6d3ac..1679e34bae 100644 --- a/docs/pt/docs/index.md +++ b/docs/pt/docs/index.md @@ -8,43 +8,43 @@![]()
- Framework FastAPI, alta performance, fácil de aprender, fácil de codar, pronto para produção + Framework FastAPI, alta performance, fácil de aprender, rápido para codar, pronto para produção
--- -**Documentação**: https://fastapi.tiangolo.com +**Documentação**: [https://fastapi.tiangolo.com/pt](https://fastapi.tiangolo.com/pt) -**Código fonte**: https://github.com/fastapi/fastapi +**Código fonte**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) --- -FastAPI é um moderno e rápido (alta performance) framework web para construção de APIs com Python, baseado nos type hints padrões do Python. +FastAPI é um framework web moderno e rápido (alta performance) para construção de APIs com Python, baseado nos type hints padrões do Python. Os recursos chave são: -* **Rápido**: alta performance, equivalente a **NodeJS** e **Go** (graças ao Starlette e Pydantic). [Um dos frameworks mais rápidos disponíveis](#performance). +* **Rápido**: alta performance, equivalente a **NodeJS** e **Go** (graças ao Starlette e Pydantic). [Um dos frameworks Python mais rápidos disponíveis](#performance). * **Rápido para codar**: Aumenta a velocidade para desenvolver recursos entre 200% a 300%. * * **Poucos bugs**: Reduz cerca de 40% de erros induzidos por humanos (desenvolvedores). * * **Intuitivo**: Grande suporte a editores. Completação em todos os lugares. Menos tempo debugando. * **Fácil**: Projetado para ser fácil de aprender e usar. Menos tempo lendo docs. * **Enxuto**: Minimize duplicação de código. Múltiplas funcionalidades para cada declaração de parâmetro. Menos bugs. * **Robusto**: Tenha código pronto para produção. E com documentação interativa automática. -* **Baseado em padrões**: Baseado em (e totalmente compatível com) os padrões abertos para APIs: OpenAPI (anteriormente conhecido como Swagger) e JSON Schema. +* **Baseado em padrões**: Baseado em (e totalmente compatível com) os padrões abertos para APIs: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (anteriormente conhecido como Swagger) e [JSON Schema](https://json-schema.org/). * estimativas baseadas em testes realizados com equipe interna de desenvolvimento, construindo aplicações em produção. @@ -55,51 +55,51 @@ Os recursos chave são: ### Patrocinador Keystone { #keystone-sponsor } {% for sponsor in sponsors.keystone -%} -+
{% endfor -%} ### Patrocinadores Ouro e Prata { #gold-and-silver-sponsors } {% for sponsor in sponsors.gold -%} -
+
{% endfor -%} {%- for sponsor in sponsors.silver -%} -
+
{% endfor %} -Outros patrocinadores +[Outros patrocinadores](https://fastapi.tiangolo.com/pt/fastapi-people/#sponsors) ## Opiniões { #opinions } "_[...] Estou usando **FastAPI** muito esses dias. [...] Estou na verdade planejando utilizar ele em todos os times de **serviços ML na Microsoft**. Alguns deles estão sendo integrados no _core_ do produto **Windows** e alguns produtos **Office**._" -
Kabir Khan - Microsoft (ref)+Kabir Khan - Microsoft (ref)--- "_Nós adotamos a biblioteca **FastAPI** para iniciar um servidor **REST** que pode ser consultado para obter **previsões**. [para o Ludwig]_" -Piero Molino, Yaroslav Dudin, e Sai Sumanth Miryala - Uber (ref)+Piero Molino, Yaroslav Dudin, e Sai Sumanth Miryala - Uber (ref)--- "_A **Netflix** tem o prazer de anunciar o lançamento open-source do nosso framework de orquestração de **gerenciamento de crises**: **Dispatch**! [criado com **FastAPI**]_" -Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)+Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)--- "_Estou muito entusiasmado com o **FastAPI**. É tão divertido!_" -Brian Okken - Python Bytes apresentador do podcast (ref)+Brian Okken - [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) apresentador do podcast (ref)--- "_Honestamente, o que você construiu parece super sólido e refinado. De muitas formas, é o que eu queria que o **Hug** fosse - é realmente inspirador ver alguém construir isso._" - +Timothy Crosley - criador do [Hug](https://github.com/hugapi/hug) (ref)--- @@ -107,27 +107,27 @@ Os recursos chave são: "_Nós trocamos nossas **APIs** por **FastAPI** [...] Acredito que você gostará dele [...]_" - +Ines Montani - Matthew Honnibal - fundadores da [Explosion AI](https://explosion.ai) - criadores da [spaCy](https://spacy.io) (ref) - (ref)--- "_Se alguém estiver procurando construir uma API Python para produção, eu recomendaria fortemente o **FastAPI**. Ele é **lindamente projetado**, **simples de usar** e **altamente escalável**, e se tornou um **componente chave** para a nossa estratégia de desenvolvimento API first, impulsionando diversas automações e serviços, como o nosso Virtual TAC Engineer._" -Deon Pillsbury - Cisco (ref)+Deon Pillsbury - Cisco (ref)--- ## Mini documentário do FastAPI { #fastapi-mini-documentary } -Há um mini documentário do FastAPI lançado no fim de 2025, você pode assisti-lo online: +Há um [mini documentário do FastAPI](https://www.youtube.com/watch?v=mpR8ngthqiE) lançado no fim de 2025, você pode assisti-lo online: -+
## **Typer**, o FastAPI das interfaces de linhas de comando { #typer-the-fastapi-of-clis } -
+
-Se você estiver construindo uma aplicação CLI para ser utilizada no terminal ao invés de uma API web, dê uma olhada no **Typer**. +Se você estiver construindo uma aplicação CLI para ser utilizada no terminal ao invés de uma API web, dê uma olhada no [**Typer**](https://typer.tiangolo.com/). **Typer** é o irmão menor do FastAPI. E seu propósito é ser o **FastAPI das CLIs**. ⌨️ 🚀 @@ -135,12 +135,12 @@ Se você estiver construindo uma aplicação Starlette para as partes web. -* Pydantic para a parte de dados. +* [Starlette](https://www.starlette.dev/) para as partes web. +* [Pydantic](https://docs.pydantic.dev/) para a parte de dados. ## Instalação { #installation } -Crie e ative um ambiente virtual e então instale o FastAPI: +Crie e ative um [ambiente virtual](https://fastapi.tiangolo.com/pt/virtual-environments/) e então instale o FastAPI:
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None): **Nota**: -Se você não sabe, verifique a seção _"Com pressa?"_ sobre `async` e `await` nas docs. +Se você não sabe, verifique a seção _"Com pressa?"_ sobre [`async` e `await` nas docs](https://fastapi.tiangolo.com/pt/async/#in-a-hurry). @@ -210,7 +210,7 @@ Rode o servidor com:```console -$ fastapi dev main.py +$ fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -235,19 +235,19 @@ INFO: Application startup complete.-### Verifique { #check-it } -Abra seu navegador em http://127.0.0.1:8000/items/5?q=somequery. +Abra seu navegador em [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery). Você verá a resposta JSON como: @@ -264,17 +264,17 @@ Você acabou de criar uma API que: ### Documentação Interativa da API { #interactive-api-docs } -Agora vá para http://127.0.0.1:8000/docs. +Agora vá para [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). -Você verá a documentação automática interativa da API (fornecida por Swagger UI): +Você verá a documentação automática interativa da API (fornecida por [Swagger UI](https://github.com/swagger-api/swagger-ui)):  ### Documentação Alternativa da API { #alternative-api-docs } -E agora, vá para http://127.0.0.1:8000/redoc. +E agora, vá para [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc). -Você verá a documentação automática alternativa (fornecida por ReDoc): +Você verá a documentação automática alternativa (fornecida por [ReDoc](https://github.com/Rebilly/ReDoc)):  @@ -316,7 +316,7 @@ O servidor `fastapi dev` deverá recarregar automaticamente. ### Evoluindo a Documentação Interativa da API { #interactive-api-docs-upgrade } -Agora vá para http://127.0.0.1:8000/docs. +Agora vá para [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). * A documentação interativa da API será automaticamente atualizada, incluindo o novo corpo: @@ -332,7 +332,7 @@ Agora vá para http://127.0.0.1:8000/redoc. +E agora, vá para [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc). * A documentação alternativa também irá refletir o novo parâmetro query e o corpo: @@ -344,7 +344,7 @@ Resumindo, você declara **uma vez** os tipos dos parâmetros, corpo etc. como p Você faz isso com os tipos padrão do Python moderno. -Você não terá que aprender uma nova sintaxe, métodos ou classes de uma biblioteca específica etc. +Você não terá que aprender uma nova sintaxe, os métodos ou classes de uma biblioteca específica etc. Apenas **Python** padrão. @@ -433,7 +433,7 @@ Experimente mudar a seguinte linha:  -Para um exemplo mais completo incluindo mais recursos, veja Tutorial - Guia do Usuário. +Para um exemplo mais completo incluindo mais recursos, veja o Tutorial - Guia do Usuário. **Alerta de Spoiler**: o tutorial - guia do usuário inclui: @@ -442,7 +442,7 @@ Para um exemplo mais completo incluindo mais recursos, veja Injeção de Dependência**. * Segurança e autenticação, incluindo suporte para **OAuth2** com autenticação com **JWT tokens** e **HTTP Basic**. * Técnicas mais avançadas (mas igualmente fáceis) para declaração de **modelos JSON profundamente aninhados** (graças ao Pydantic). -* Integrações **GraphQL** com o Strawberry e outras bibliotecas. +* Integrações **GraphQL** com o [Strawberry](https://strawberry.rocks) e outras bibliotecas. * Muitos recursos extras (graças ao Starlette) como: * **WebSockets** * testes extremamente fáceis baseados em HTTPX e `pytest` @@ -452,24 +452,10 @@ Para um exemplo mais completo incluindo mais recursos, veja FastAPI Cloud, vá e entre na lista de espera se ainda não o fez. 🚀 +Você pode opcionalmente implantar sua aplicação FastAPI na [FastAPI Cloud](https://fastapicloud.com), vá e entre na lista de espera se ainda não o fez. 🚀 Se você já tem uma conta na **FastAPI Cloud** (nós convidamos você da lista de espera 😉), pode implantar sua aplicação com um único comando. -Antes de implantar, certifique-se de que está autenticado: - -Sobre o comando
+fastapi dev main.py...Sobre o comando
-O comando `fastapi dev` lê o seu arquivo `main.py`, identifica o aplicativo **FastAPI** nele, e inicia um servidor usando o Uvicorn. +O comando `fastapi dev` lê automaticamente o seu arquivo `main.py`, detecta a aplicação **FastAPI** nele e inicia um servidor usando o [Uvicorn](https://www.uvicorn.dev). -Por padrão, o `fastapi dev` iniciará com *auto-reload* habilitado para desenvolvimento local. +Por padrão, o `fastapi dev` iniciará com auto-reload habilitado para desenvolvimento local. -Você pode ler mais sobre isso na documentação do FastAPI CLI. +Você pode ler mais sobre isso na [documentação do FastAPI CLI](https://fastapi.tiangolo.com/pt/fastapi-cli/).fastapi dev...- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -- -Depois, implemente sua aplicação: -```console @@ -488,7 +474,7 @@ Deploying to FastAPI Cloud... #### Sobre a FastAPI Cloud { #about-fastapi-cloud } -**FastAPI Cloud** é construída pelo mesmo autor e equipe por trás do **FastAPI**. +**[FastAPI Cloud](https://fastapicloud.com)** é construída pelo mesmo autor e equipe por trás do **FastAPI**. Ela simplifica o processo de **construir**, **implantar** e **acessar** uma API com esforço mínimo. @@ -504,9 +490,9 @@ Siga os tutoriais do seu provedor de nuvem para implantar aplicações FastAPI c ## Performance { #performance } -Testes de performance da Independent TechEmpower mostram aplicações **FastAPI** rodando sob Uvicorn como um dos frameworks Python mais rápidos disponíveis, somente atrás de Starlette e Uvicorn (utilizados internamente pelo FastAPI). (*) +Testes de performance independentes do TechEmpower mostram aplicações **FastAPI** rodando sob Uvicorn como [um dos frameworks Python mais rápidos disponíveis](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), somente atrás de Starlette e Uvicorn (utilizados internamente pelo FastAPI). (*) -Para entender mais sobre isso, veja a seção Comparações. +Para entender mais sobre isso, veja a seção [Comparações](https://fastapi.tiangolo.com/pt/benchmarks/). ## Dependências { #dependencies } @@ -518,19 +504,19 @@ Quando você instala o FastAPI com `pip install "fastapi[standard]"`, ele vem co Utilizado pelo Pydantic: -*email-validator- para validação de email. +* [`email-validator`](https://github.com/JoshData/python-email-validator) - para validação de email. Utilizado pelo Starlette: -*httpx- Obrigatório caso você queira utilizar o `TestClient`. -*jinja2- Obrigatório se você quer utilizar a configuração padrão de templates. -*python-multipart- Obrigatório se você deseja suporte a "parsing" de formulário, com `request.form()`. +* [`httpx`](https://www.python-httpx.org) - Obrigatório caso você queira utilizar o `TestClient`. +* [`jinja2`](https://jinja.palletsprojects.com) - Obrigatório se você quer utilizar a configuração padrão de templates. +* [`python-multipart`](https://github.com/Kludex/python-multipart) - Obrigatório se você deseja suporte a "parsing" de formulário, com `request.form()`. Utilizado pelo FastAPI: -*uvicorn- para o servidor que carrega e serve a sua aplicação. Isto inclui `uvicorn[standard]`, que inclui algumas dependências (e.g. `uvloop`) necessárias para servir em alta performance. +* [`uvicorn`](https://www.uvicorn.dev) - para o servidor que carrega e serve a sua aplicação. Isto inclui `uvicorn[standard]`, que inclui algumas dependências (e.g. `uvloop`) necessárias para servir em alta performance. * `fastapi-cli[standard]` - que disponibiliza o comando `fastapi`. - * Isso inclui `fastapi-cloud-cli`, que permite implantar sua aplicação FastAPI na FastAPI Cloud. + * Isso inclui `fastapi-cloud-cli`, que permite implantar sua aplicação FastAPI na [FastAPI Cloud](https://fastapicloud.com). ### Sem as dependências `standard` { #without-standard-dependencies } @@ -546,13 +532,13 @@ Existem algumas dependências adicionais que você pode querer instalar. Dependências opcionais adicionais do Pydantic: -*pydantic-settings- para gerenciamento de configurações. -*pydantic-extra-types- para tipos extras a serem utilizados com o Pydantic. +* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - para gerenciamento de configurações. +* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - para tipos extras a serem utilizados com o Pydantic. Dependências opcionais adicionais do FastAPI: -*orjson- Obrigatório se você deseja utilizar o `ORJSONResponse`. -*ujson- Obrigatório se você deseja utilizar o `UJSONResponse`. +* [`orjson`](https://github.com/ijl/orjson) - Obrigatório se você deseja utilizar o `ORJSONResponse`. +* [`ujson`](https://github.com/esnme/ultrajson) - Obrigatório se você deseja utilizar o `UJSONResponse`. ## Licença { #license } diff --git a/docs/pt/docs/project-generation.md b/docs/pt/docs/project-generation.md index 419a39879f..8a34071a65 100644 --- a/docs/pt/docs/project-generation.md +++ b/docs/pt/docs/project-generation.md @@ -4,7 +4,7 @@ _Templates_, embora tipicamente venham com alguma configuração específica, s Você pode usar esse _template_ para começar, já que ele inclui várias configurações iniciais, segurança, banco de dados, e alguns _endpoints_ de API já feitos para você. -Repositório GitHub: Full Stack FastAPI Template +Repositório GitHub: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template) ## Full Stack FastAPI Template - Pilha de Tecnologias e Recursos { #full-stack-fastapi-template-technology-stack-and-features } @@ -19,10 +19,10 @@ Repositório GitHub: Pydantic é uma biblioteca Python para executar a validação de dados. +[Pydantic](https://docs.pydantic.dev/) é uma biblioteca Python para executar a validação de dados. Você declara a "forma" dos dados como classes com atributos. @@ -285,13 +285,13 @@ Um exemplo da documentação oficial do Pydantic: /// info | Informação -Para saber mais sobre o Pydantic, verifique a sua documentação. +Para saber mais sobre o [Pydantic, verifique a documentação](https://docs.pydantic.dev/). /// O **FastAPI** é todo baseado em Pydantic. -Você verá muito mais disso na prática no [Tutorial - Guia do usuário](tutorial/index.md){.internal-link target=_blank}. +Você verá muito mais disso na prática no [Tutorial - Guia do usuário](tutorial/index.md). ## Type Hints com Metadados de Anotações { #type-hints-with-metadata-annotations } @@ -337,12 +337,12 @@ Com o **FastAPI**, você declara parâmetros com type hints e obtém: * **Documentar** a API usando OpenAPI: * que é usada pelas interfaces de usuário da documentação interativa automática. -Tudo isso pode parecer abstrato. Não se preocupe. Você verá tudo isso em ação no [Tutorial - Guia do usuário](tutorial/index.md){.internal-link target=_blank}. +Tudo isso pode parecer abstrato. Não se preocupe. Você verá tudo isso em ação no [Tutorial - Guia do usuário](tutorial/index.md). O importante é que, usando tipos padrão de Python, em um único local (em vez de adicionar mais classes, decoradores, etc.), o **FastAPI** fará muito trabalho para você. /// info | Informação -Se você já passou por todo o tutorial e voltou para ver mais sobre os tipos, um bom recurso é a "cheat sheet" do `mypy`. +Se você já passou por todo o tutorial e voltou para ver mais sobre os tipos, um bom recurso é [a "cheat sheet" do `mypy`](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html). /// diff --git a/docs/pt/docs/tutorial/bigger-applications.md b/docs/pt/docs/tutorial/bigger-applications.md index ad758988f7..971504fa4f 100644 --- a/docs/pt/docs/tutorial/bigger-applications.md +++ b/docs/pt/docs/tutorial/bigger-applications.md @@ -123,7 +123,7 @@ Agora usaremos uma dependência simples para ler um cabeçalho `X-Token` persona Estamos usando um cabeçalho inventado para simplificar este exemplo. -Mas em casos reais, você obterá melhores resultados usando os [Utilitários de Segurança](security/index.md){.internal-link target=_blank} integrados. +Mas em casos reais, você obterá melhores resultados usando os [Utilitários de Segurança](security/index.md) integrados. /// @@ -169,7 +169,7 @@ E podemos adicionar uma list de `dependencies` que serão adicionadas a todas as /// tip | Dica -Observe que, assim como [dependências em *decoradores de operação de rota*](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, nenhum valor será passado para sua *função de operação de rota*. +Observe que, assim como [dependências em *decoradores de operação de rota*](dependencies/dependencies-in-path-operation-decorators.md), nenhum valor será passado para sua *função de operação de rota*. /// @@ -185,8 +185,8 @@ O resultado final é que os paths dos itens agora são: * Todas elas incluirão as `responses` predefinidas. * Todas essas *operações de rota* terão a list de `dependencies` avaliada/executada antes delas. * Se você também declarar dependências em uma *operação de rota* específica, **elas também serão executadas**. - * As dependências do router são executadas primeiro, depois as [`dependencies` no decorador](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank} e, em seguida, as dependências de parâmetros normais. - * Você também pode adicionar [dependências de `Segurança` com `scopes`](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}. + * As dependências do router são executadas primeiro, depois as [`dependencies` no decorador](dependencies/dependencies-in-path-operation-decorators.md) e, em seguida, as dependências de parâmetros normais. + * Você também pode adicionar [dependências de `Segurança` com `scopes`](../advanced/security/oauth2-scopes.md). /// tip | Dica @@ -303,7 +303,7 @@ E como a maior parte de sua lógica agora viverá em seu próprio módulo espec Você importa e cria uma classe `FastAPI` normalmente. -E podemos até declarar [dependências globais](dependencies/global-dependencies.md){.internal-link target=_blank} que serão combinadas com as dependências para cada `APIRouter`: +E podemos até declarar [dependências globais](dependencies/global-dependencies.md) que serão combinadas com as dependências para cada `APIRouter`: {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *} @@ -353,7 +353,7 @@ A segunda versão é uma "importação absoluta": from app.routers import items, users ``` -Para saber mais sobre pacotes e módulos Python, leia a documentação oficial do Python sobre módulos. +Para saber mais sobre pacotes e módulos Python, leia [a documentação oficial do Python sobre módulos](https://docs.python.org/3/tutorial/modules.html). /// @@ -465,6 +465,37 @@ Como não podemos simplesmente isolá-los e "montá-los" independentemente do re /// +## Configure o `entrypoint` em `pyproject.toml` { #configure-the-entrypoint-in-pyproject-toml } + +Como seu objeto `app` do FastAPI fica em `app/main.py`, você pode configurar o `entrypoint` no seu arquivo `pyproject.toml` assim: + +```toml +[tool.fastapi] +entrypoint = "app.main:app" +``` + +isso é equivalente a importar como: + +```python +from app.main import app +``` + +Dessa forma o comando `fastapi` saberá onde encontrar sua aplicação. + +/// Note | Nota + +Você também poderia passar o path para o comando, como: + +```console +$ fastapi dev app/main.py +``` + +Mas você teria que lembrar de passar o path correto toda vez que chamar o comando `fastapi`. + +Além disso, outras ferramentas podem não conseguir encontrá-la, por exemplo a [Extensão do VS Code](../editor-support.md) ou a [FastAPI Cloud](https://fastapicloud.com), portanto é recomendável usar o `entrypoint` em `pyproject.toml`. + +/// + ## Verifique a documentação automática da API { #check-the-automatic-api-docs } Agora, execute sua aplicação: @@ -472,14 +503,14 @@ Agora, execute sua aplicação:```console -$ fastapi dev app/main.py +$ fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```-E abra a documentação em http://127.0.0.1:8000/docs. +E abra a documentação em [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). Você verá a documentação automática da API, incluindo os paths de todos os submódulos, usando os paths (e prefixos) corretos e as tags corretas: diff --git a/docs/pt/docs/tutorial/body-updates.md b/docs/pt/docs/tutorial/body-updates.md index 95f89c8d23..abd14c42ce 100644 --- a/docs/pt/docs/tutorial/body-updates.md +++ b/docs/pt/docs/tutorial/body-updates.md @@ -2,7 +2,7 @@ ## Atualização substituindo com `PUT` { #update-replacing-with-put } -Para atualizar um item, você pode usar a operação HTTP `PUT`. +Para atualizar um item, você pode usar a operação [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT). Você pode usar `jsonable_encoder` para converter os dados de entrada em dados que podem ser armazenados como JSON (por exemplo, com um banco de dados NoSQL). Por exemplo, convertendo `datetime` em `str`. @@ -28,7 +28,7 @@ E os dados seriam salvos com esse "novo" `tax` de `10.5`. ## Atualizações parciais com `PATCH` { #partial-updates-with-patch } -Você também pode usar a operação HTTP `PATCH` para atualizar dados *parcialmente*. +Você também pode usar a operação [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) para atualizar dados *parcialmente*. Isso significa que você pode enviar apenas os dados que deseja atualizar, deixando o restante intacto. @@ -95,6 +95,6 @@ Observe que o modelo de entrada ainda é validado. Portanto, se você quiser receber atualizações parciais que possam omitir todos os atributos, você precisa ter um modelo com todos os atributos marcados como opcionais (com valores padrão ou `None`). -Para distinguir entre os modelos com todos os valores opcionais para **atualizações** e modelos com valores obrigatórios para **criação**, você pode usar as ideias descritas em [Modelos Adicionais](extra-models.md){.internal-link target=_blank}. +Para distinguir entre os modelos com todos os valores opcionais para **atualizações** e modelos com valores obrigatórios para **criação**, você pode usar as ideias descritas em [Modelos Adicionais](extra-models.md). /// diff --git a/docs/pt/docs/tutorial/cors.md b/docs/pt/docs/tutorial/cors.md index 055cfeacad..e351d5c5cf 100644 --- a/docs/pt/docs/tutorial/cors.md +++ b/docs/pt/docs/tutorial/cors.md @@ -1,6 +1,6 @@ # CORS (Cross-Origin Resource Sharing) { #cors-cross-origin-resource-sharing } -CORS ou "Cross-Origin Resource Sharing" refere-se às situações em que um frontend rodando em um navegador possui um código JavaScript que se comunica com um backend, e o backend está em uma "origem" diferente do frontend. +[CORS ou "Cross-Origin Resource Sharing"](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) refere-se às situações em que um frontend rodando em um navegador possui um código JavaScript que se comunica com um backend, e o backend está em uma "origem" diferente do frontend. ## Origem { #origin } @@ -56,10 +56,10 @@ Os seguintes argumentos são suportados: * `allow_origins` - Uma lista de origens que devem ter permissão para fazer requisições de origem cruzada. Por exemplo, `['https://example.org', 'https://www.example.org']`. Você pode usar `['*']` para permitir qualquer origem. * `allow_origin_regex` - Uma string regex para corresponder às origens que devem ter permissão para fazer requisições de origem cruzada. Por exemplo, `'https://.*\.example\.org'`. * `allow_methods` - Uma lista de métodos HTTP que devem ser permitidos para requisições de origem cruzada. O padrão é `['GET']`. Você pode usar `['*']` para permitir todos os métodos padrão. -* `allow_headers` - Uma lista de cabeçalhos de solicitação HTTP que devem ter suporte para requisições de origem cruzada. O padrão é `[]`. Você pode usar `['*']` para permitir todos os cabeçalhos. Os cabeçalhos `Accept`, `Accept-Language`, `Content-Language` e `Content-Type` são sempre permitidos para requisições CORS simples. +* `allow_headers` - Uma lista de cabeçalhos de solicitação HTTP que devem ter suporte para requisições de origem cruzada. O padrão é `[]`. Você pode usar `['*']` para permitir todos os cabeçalhos. Os cabeçalhos `Accept`, `Accept-Language`, `Content-Language` e `Content-Type` são sempre permitidos para [requisições CORS simples](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests). * `allow_credentials` - Indica que os cookies devem ser suportados para requisições de origem cruzada. O padrão é `False`. - Nenhum de `allow_origins`, `allow_methods` e `allow_headers` pode ser definido como `['*']` se `allow_credentials` estiver definido como `True`. Todos eles devem ser especificados explicitamente. + Nenhum de `allow_origins`, `allow_methods` e `allow_headers` pode ser definido como `['*']` se `allow_credentials` estiver definido como `True`. Todos eles devem ser [especificados explicitamente](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards). * `expose_headers` - Indica quaisquer cabeçalhos de resposta que devem ser disponibilizados ao navegador. O padrão é `[]`. * `max_age` - Define um tempo máximo em segundos para os navegadores armazenarem em cache as respostas CORS. O padrão é `600`. @@ -78,7 +78,7 @@ Qualquer solicitação com um cabeçalho `Origin`. Neste caso, o middleware pass ## Mais informações { #more-info } -Para mais informações sobre CORS, consulte a documentação do CORS da Mozilla. +Para mais informações sobre CORS, consulte a [documentação do CORS da Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS). /// note | Detalhes Técnicos diff --git a/docs/pt/docs/tutorial/debugging.md b/docs/pt/docs/tutorial/debugging.md index 773921bb3c..b2c0ed8caf 100644 --- a/docs/pt/docs/tutorial/debugging.md +++ b/docs/pt/docs/tutorial/debugging.md @@ -74,7 +74,7 @@ não será executada. /// info | Informação -Para mais informações, consulte a documentação oficial do Python. +Para mais informações, consulte [a documentação oficial do Python](https://docs.python.org/3/library/__main__.html). /// diff --git a/docs/pt/docs/tutorial/encoder.md b/docs/pt/docs/tutorial/encoder.md index b3b1b69bc3..e1ee2eccfd 100644 --- a/docs/pt/docs/tutorial/encoder.md +++ b/docs/pt/docs/tutorial/encoder.md @@ -12,7 +12,7 @@ Vamos imaginar que você tenha um banco de dados `fake_db` que recebe apenas dad Por exemplo, ele não recebe objetos `datetime`, pois estes objetos não são compatíveis com JSON. -Então, um objeto `datetime` teria que ser convertido em um `str` contendo os dados no formato ISO. +Então, um objeto `datetime` teria que ser convertido em um `str` contendo os dados no [formato ISO](https://en.wikipedia.org/wiki/ISO_8601). Da mesma forma, este banco de dados não receberia um modelo Pydantic (um objeto com atributos), apenas um `dict`. @@ -24,7 +24,7 @@ A função recebe um objeto, como um modelo Pydantic e retorna uma versão compa Neste exemplo, ele converteria o modelo Pydantic em um `dict`, e o `datetime` em um `str`. -O resultado de chamar a função é algo que pode ser codificado com o padrão do Python `json.dumps()`. +O resultado de chamar a função é algo que pode ser codificado com o padrão do Python [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps). A função não retorna um grande `str` contendo os dados no formato JSON (como uma string). Mas sim, retorna uma estrutura de dados padrão do Python (por exemplo, um `dict`) com valores e subvalores compatíveis com JSON. diff --git a/docs/pt/docs/tutorial/extra-data-types.md b/docs/pt/docs/tutorial/extra-data-types.md index 97e4cc4757..e323d57301 100644 --- a/docs/pt/docs/tutorial/extra-data-types.md +++ b/docs/pt/docs/tutorial/extra-data-types.md @@ -36,12 +36,12 @@ Aqui estão alguns dos tipos de dados adicionais que você pode usar: * `datetime.timedelta`: * O `datetime.timedelta` do Python. * Em requisições e respostas será representado como um `float` de segundos totais. - * O Pydantic também permite representá-lo como uma "codificação ISO 8601 diferença de tempo", cheque a documentação para mais informações. + * O Pydantic também permite representá-lo como uma "codificação ISO 8601 diferença de tempo", [cheque a documentação para mais informações](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers). * `frozenset`: * Em requisições e respostas, será tratado da mesma forma que um `set`: * Nas requisições, uma lista será lida, eliminando duplicadas e convertendo-a em um `set`. * Nas respostas, o `set` será convertido para uma `list`. - * O esquema gerado vai especificar que os valores do `set` são unicos (usando o `uniqueItems` do JSON Schema). + * O esquema gerado vai especificar que os valores do `set` são únicos (usando o `uniqueItems` do JSON Schema). * `bytes`: * O `bytes` padrão do Python. * Em requisições e respostas será representado como uma `str`. @@ -49,7 +49,7 @@ Aqui estão alguns dos tipos de dados adicionais que você pode usar: * `Decimal`: * O `Decimal` padrão do Python. * Em requisições e respostas será representado como um `float`. -* Você pode checar todos os tipos de dados válidos do Pydantic aqui: Tipos de dados do Pydantic. +* Você pode checar todos os tipos de dados válidos do Pydantic aqui: [Tipos de dados do Pydantic](https://docs.pydantic.dev/latest/usage/types/types/). ## Exemplo { #example } @@ -57,6 +57,6 @@ Aqui está um exemplo de *operação de rota* com parâmetros utilizando-se de a {* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[1,3,12:16] *} -Note que os parâmetros dentro da função tem seu tipo de dados natural, e você pode, por exemplo, realizar manipulações normais de data, como: +Note que os parâmetros dentro da função têm seu tipo de dados natural, e você pode, por exemplo, realizar manipulações normais de data, como: {* ../../docs_src/extra_data_types/tutorial001_an_py310.py hl[18:19] *} diff --git a/docs/pt/docs/tutorial/extra-models.md b/docs/pt/docs/tutorial/extra-models.md index 3136597417..424e0fe185 100644 --- a/docs/pt/docs/tutorial/extra-models.md +++ b/docs/pt/docs/tutorial/extra-models.md @@ -12,7 +12,7 @@ Isso é especialmente o caso para modelos de usuários, porque: Nunca armazene senhas em texto simples dos usuários. Sempre armazene uma "hash segura" que você pode verificar depois. -Se não souber, você aprenderá o que é uma "senha hash" nos [capítulos de segurança](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}. +Se não souber, você aprenderá o que é uma "senha hash" nos [capítulos de segurança](security/simple-oauth2.md#password-hashing). /// @@ -162,11 +162,11 @@ Você pode declarar uma resposta como o `Union` de dois ou mais tipos, o que sig Isso será definido no OpenAPI com `anyOf`. -Para fazer isso, use a anotação de tipo padrão do Python `typing.Union`: +Para fazer isso, use a anotação de tipo padrão do Python [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union): /// note | Nota -Ao definir um `Union`, inclua o tipo mais específico primeiro, seguido pelo tipo menos específico. No exemplo abaixo, o tipo mais específico `PlaneItem` vem antes de `CarItem` em `Union[PlaneItem, CarItem]`. +Ao definir um [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions), inclua o tipo mais específico primeiro, seguido pelo tipo menos específico. No exemplo abaixo, o tipo mais específico `PlaneItem` vem antes de `CarItem` em `Union[PlaneItem, CarItem]`. /// diff --git a/docs/pt/docs/tutorial/first-steps.md b/docs/pt/docs/tutorial/first-steps.md index 4ccc7cf040..719a38c209 100644 --- a/docs/pt/docs/tutorial/first-steps.md +++ b/docs/pt/docs/tutorial/first-steps.md @@ -6,12 +6,12 @@ O arquivo FastAPI mais simples pode se parecer com: Copie o conteúdo para um arquivo `main.py`. -Execute o servidor: +Execute o servidor ao vivo:```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -58,7 +58,7 @@ Essa linha mostra a URL onde a sua aplicação está sendo servida, na sua máqu ### Confira { #check-it } -Abra o seu navegador em http://127.0.0.1:8000. +Abra o seu navegador em [http://127.0.0.1:8000](http://127.0.0.1:8000). Você verá essa resposta em JSON: @@ -68,17 +68,17 @@ Você verá essa resposta em JSON: ### Documentação Interativa de APIs { #interactive-api-docs } -Agora vá para http://127.0.0.1:8000/docs. +Agora vá para [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs). -Você verá a documentação interativa automática da API (fornecida por Swagger UI): +Você verá a documentação interativa automática da API (fornecida por [Swagger UI](https://github.com/swagger-api/swagger-ui)):  ### Documentação Alternativa de APIs { #alternative-api-docs } -E agora, vá para http://127.0.0.1:8000/redoc. +E agora, vá para [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc). -Você verá a documentação alternativa automática (fornecida por ReDoc): +Você verá a documentação alternativa automática (fornecida por [ReDoc](https://github.com/Rebilly/ReDoc)):  @@ -92,7 +92,7 @@ Um "*schema*" é uma definição ou descrição de algo. Não o código que o im #### API "*schema*" { #api-schema } -Nesse caso, OpenAPI é uma especificação que determina como definir um *schema* da sua API. +Nesse caso, [OpenAPI](https://github.com/OAI/OpenAPI-Specification) é uma especificação que determina como definir um *schema* da sua API. Esta definição de *schema* inclui os paths da sua API, os parâmetros possíveis que eles usam, etc. @@ -110,7 +110,7 @@ OpenAPI define um *schema* de API para sua API. E esse *schema* inclui definiç Se você está curioso(a) sobre a aparência do *schema* bruto OpenAPI, o FastAPI gera automaticamente um JSON (*schema*) com as descrições de toda a sua API. -Você pode ver isso diretamente em: http://127.0.0.1:8000/openapi.json. +Você pode ver isso diretamente em: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json). Ele mostrará um JSON começando com algo como: @@ -143,9 +143,58 @@ E existem dezenas de alternativas, todas baseadas em OpenAPI. Você pode facilme Você também pode usá-lo para gerar código automaticamente para clientes que se comunicam com sua API. Por exemplo, aplicativos front-end, móveis ou IoT. +### Configure o `entrypoint` da aplicação em `pyproject.toml` { #configure-the-app-entrypoint-in-pyproject-toml } + +Você pode configurar onde sua aplicação está localizada em um arquivo `pyproject.toml`, assim: + +```toml +[tool.fastapi] +entrypoint = "main:app" +``` + +Esse `entrypoint` dirá ao comando `fastapi` que ele deve importar a aplicação assim: + +```python +from main import app +``` + +Se o seu código estiver estruturado assim: + +``` +. +├── backend +│ ├── main.py +│ ├── __init__.py +``` + +Então você definiria o `entrypoint` como: + +```toml +[tool.fastapi] +entrypoint = "backend.main:app" +``` + +o que seria equivalente a: + +```python +from backend.main import app +``` + +### `fastapi dev` com path { #fastapi-dev-with-path } + +Você também pode passar o path do arquivo para o comando `fastapi dev`, e ele vai deduzir o objeto de aplicação FastAPI a ser usado: + +```console +$ fastapi dev main.py +``` + +Mas você teria que lembrar de passar o path correto toda vez que chamar o comando `fastapi`. + +Além disso, outras ferramentas podem não conseguir encontrá-la, por exemplo, a [Extensão do VS Code](../editor-support.md) ou a [FastAPI Cloud](https://fastapicloud.com), então é recomendado usar o `entrypoint` no `pyproject.toml`. + ### Faça o deploy da sua aplicação (opcional) { #deploy-your-app-optional } -Você pode, opcionalmente, fazer o deploy da sua aplicação FastAPI na FastAPI Cloud; acesse e entre na lista de espera, se ainda não entrou. 🚀 +Você pode, opcionalmente, fazer o deploy da sua aplicação FastAPI na [FastAPI Cloud](https://fastapicloud.com); acesse e entre na lista de espera, se ainda não entrou. 🚀 Se você já tem uma conta na **FastAPI Cloud** (nós convidamos você da lista de espera 😉), pode fazer o deploy da sua aplicação com um único comando. @@ -191,7 +240,7 @@ Deploying to FastAPI Cloud... `FastAPI` é uma classe que herda diretamente de `Starlette`. -Você pode usar todas as funcionalidades do Starlette com `FastAPI` também. +Você pode usar todas as funcionalidades do [Starlette](https://www.starlette.dev/) com `FastAPI` também. /// @@ -312,7 +361,7 @@ Por exemplo, ao usar GraphQL, você normalmente executa todas as ações usando /// -### Passo 4: defina a função de operação de rota { #step-4-define-the-path-operation-function } +### Passo 4: defina a **função de operação de rota** { #step-4-define-the-path-operation-function } Esta é a nossa "**função de operação de rota**": @@ -336,7 +385,7 @@ Você também pode defini-la como uma função normal em vez de `async def`: /// note | Nota -Se você não sabe a diferença, verifique o [Async: *"Com pressa?"*](../async.md#in-a-hurry){.internal-link target=_blank}. +Se você não sabe a diferença, verifique o [Async: *"Com pressa?"*](../async.md#in-a-hurry). /// @@ -352,11 +401,11 @@ Existem muitos outros objetos e modelos que serão convertidos automaticamente p ### Passo 6: Faça o deploy { #step-6-deploy-it } -Faça o deploy da sua aplicação para a **FastAPI Cloud** com um comando: `fastapi deploy`. 🎉 +Faça o deploy da sua aplicação para a **[FastAPI Cloud](https://fastapicloud.com)** com um comando: `fastapi deploy`. 🎉 #### Sobre o FastAPI Cloud { #about-fastapi-cloud } -A **FastAPI Cloud** é construída pelo mesmo autor e equipe por trás do **FastAPI**. +A **[FastAPI Cloud](https://fastapicloud.com)** é construída pelo mesmo autor e equipe por trás do **FastAPI**. Ela simplifica o processo de **construir**, **fazer deploy** e **acessar** uma API com o mínimo de esforço. diff --git a/docs/pt/docs/tutorial/handling-errors.md b/docs/pt/docs/tutorial/handling-errors.md index 252dbb06fb..c400a1e848 100644 --- a/docs/pt/docs/tutorial/handling-errors.md +++ b/docs/pt/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ Mas caso você precise, para um cenário mais complexo, você pode adicionar hea ## Instale manipuladores de exceções customizados { #install-custom-exception-handlers } -Você pode adicionar manipuladores de exceção customizados com a mesma seção de utilidade de exceções presentes no Starlette. +Você pode adicionar manipuladores de exceção customizados com [a mesma seção de utilidade de exceções presentes no Starlette](https://www.starlette.dev/exceptions/). Digamos que você tenha uma exceção customizada `UnicornException` que você (ou uma biblioteca que você use) precise lançar (`raise`). diff --git a/docs/pt/docs/tutorial/index.md b/docs/pt/docs/tutorial/index.md index cd7dd88fe9..7f0790d86b 100644 --- a/docs/pt/docs/tutorial/index.md +++ b/docs/pt/docs/tutorial/index.md @@ -10,12 +10,12 @@ Ele também foi construído para servir como uma referência futura, então voc Todos os blocos de código podem ser copiados e utilizados diretamente (eles são, na verdade, arquivos Python testados). -Para rodar qualquer um dos exemplos, copie o código para um arquivo `main.py`, e inicie o `fastapi dev` com: +Para rodar qualquer um dos exemplos, copie o código para um arquivo `main.py`, e inicie o `fastapi dev`:```console -$ fastapi dev main.py +$ fastapi dev FastAPI Starting development server 🚀 @@ -47,7 +47,7 @@ $ fastapi dev INFO Started reloader process [383138] using WatchFiles INFO Started server process [383153] INFO Waiting for application startup. - INFO Application startup complete. + INFO Application startup complete. ```@@ -62,7 +62,7 @@ Usá-lo em seu editor é o que realmente te mostra os benefícios do FastAPI, ve O primeiro passo é instalar o FastAPI. -Certifique-se de criar um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, ativá-lo e então **instalar o FastAPI**: +Certifique-se de criar um [ambiente virtual](../virtual-environments.md), ativá-lo e então **instalar o FastAPI**:@@ -76,7 +76,7 @@ $ pip install "fastapi[standard]" /// note | Nota -Quando você instala com `pip install "fastapi[standard]"`, ele vem com algumas dependências opcionais padrão, incluindo `fastapi-cloud-cli`, que permite fazer deploy na FastAPI Cloud. +Quando você instala com `pip install "fastapi[standard]"`, ele vem com algumas dependências opcionais padrão, incluindo `fastapi-cloud-cli`, que permite fazer deploy na [FastAPI Cloud](https://fastapicloud.com). Se você não quiser ter essas dependências opcionais, pode instalar `pip install fastapi` em vez disso. @@ -84,6 +84,12 @@ Se você quiser instalar as dependências padrão, mas sem o `fastapi-cloud-cli` /// +/// tip | Dica + +O FastAPI tem uma [extensão oficial para o VS Code](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) (e para o Cursor), que fornece vários recursos, incluindo um explorador de operações de rota, busca de operações de rota, navegação CodeLens em testes (ir para a definição a partir dos testes) e deploy e logs da FastAPI Cloud, tudo direto do seu editor. + +/// + ## Guia Avançado de Usuário { #advanced-user-guide } Há também um **Guia Avançado de Usuário** que você pode ler após esse **Tutorial - Guia de Usuário**. diff --git a/docs/pt/docs/tutorial/middleware.md b/docs/pt/docs/tutorial/middleware.md index 7cccfcb6ac..5ae5854da7 100644 --- a/docs/pt/docs/tutorial/middleware.md +++ b/docs/pt/docs/tutorial/middleware.md @@ -15,7 +15,7 @@ Um "middleware" é uma função que manipula cada **requisição** antes de ser Se você tiver dependências com `yield`, o código de saída será executado *depois* do middleware. -Se houver alguma tarefa em segundo plano (abordada na seção [Tarefas em segundo plano](background-tasks.md){.internal-link target=_blank}, que você verá mais adiante), ela será executada *depois* de todo o middleware. +Se houver alguma tarefa em segundo plano (abordada na seção [Tarefas em segundo plano](background-tasks.md), que você verá mais adiante), ela será executada *depois* de todo o middleware. /// @@ -35,9 +35,9 @@ A função middleware recebe: /// tip | Dica -Tenha em mente que cabeçalhos proprietários personalizados podem ser adicionados usando o prefixo `X-`. +Tenha em mente que cabeçalhos proprietários personalizados podem ser adicionados [usando o prefixo `X-`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers). -Mas se você tiver cabeçalhos personalizados desejando que um cliente em um navegador esteja apto a ver, você precisa adicioná-los às suas configurações CORS ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}) usando o parâmetro `expose_headers` documentado em Documentação CORS da Starlette. +Mas se você tiver cabeçalhos personalizados desejando que um cliente em um navegador esteja apto a ver, você precisa adicioná-los às suas configurações CORS ([CORS (Cross-Origin Resource Sharing)](cors.md)) usando o parâmetro `expose_headers` documentado na [Documentação CORS da Starlette](https://www.starlette.dev/middleware/#corsmiddleware). /// @@ -61,7 +61,7 @@ Por exemplo, você pode adicionar um cabeçalho personalizado `X-Process-Time` c /// tip | Dica -Aqui usamos `time.perf_counter()` em vez de `time.time()` porque ele pode ser mais preciso para esses casos de uso. 🤓 +Aqui usamos [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) em vez de `time.time()` porque ele pode ser mais preciso para esses casos de uso. 🤓 /// @@ -90,6 +90,6 @@ Esse comportamento de empilhamento garante que os middlewares sejam executados e ## Outros middlewares { #other-middlewares } -Mais tarde, você pode ler mais sobre outros middlewares no [Guia do usuário avançado: Middleware avançado](../advanced/middleware.md){.internal-link target=_blank}. +Mais tarde, você pode ler mais sobre outros middlewares no [Guia do usuário avançado: Middleware avançado](../advanced/middleware.md). Você lerá sobre como manipular CORS com um middleware na próxima seção. diff --git a/docs/pt/docs/tutorial/path-params.md b/docs/pt/docs/tutorial/path-params.md index e8e420ad0d..ea9af63f36 100644 --- a/docs/pt/docs/tutorial/path-params.md +++ b/docs/pt/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ Você pode declarar "parâmetros" ou "variáveis" de path com a mesma sintaxe us O valor do parâmetro de path `item_id` será passado para a sua função como o argumento `item_id`. -Então, se você executar este exemplo e acessar http://127.0.0.1:8000/items/foo, você verá uma resposta: +Então, se você executar este exemplo e acessar [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo), você verá uma resposta: ```JSON {"item_id":"foo"} @@ -26,7 +26,7 @@ Isso fornecerá suporte do editor dentro da sua função, com verificações de ## Dados conversão { #data-conversion } -Se você executar este exemplo e abrir seu navegador em http://127.0.0.1:8000/items/3, você verá uma resposta: +Se você executar este exemplo e abrir seu navegador em [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3), você verá uma resposta: ```JSON {"item_id":3} @@ -40,7 +40,7 @@ Então, com essa declaração de tipo, o **FastAPI** fornece http://127.0.0.1:8000/items/foo, verá um bom erro HTTP: +Mas se você for no navegador para [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo), verá um bom erro HTTP: ```JSON { @@ -60,7 +60,7 @@ Mas se você for no navegador para http://127.0.0.1:8000/items/4.2 +O mesmo erro apareceria se você fornecesse um `float` em vez de um `int`, como em: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) /// check | Verifique Então, com a mesma declaração de tipo do Python, o **FastAPI** fornece validação de dados. @@ -72,7 +72,7 @@ Isso é incrivelmente útil ao desenvolver e depurar código que interage com su ## Documentação { #documentation } -E quando você abrir seu navegador em http://127.0.0.1:8000/docs, você verá documentação automática, interativa, da API como: +E quando você abrir seu navegador em [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs), você verá documentação automática, interativa, da API como:@@ -84,9 +84,9 @@ Observe que o parâmetro de path está declarado como um inteiro. ## Benefícios baseados em padrões, documentação alternativa { #standards-based-benefits-alternative-documentation } -E como o schema gerado é do padrão OpenAPI, existem muitas ferramentas compatíveis. +E como o schema gerado é do padrão [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md), existem muitas ferramentas compatíveis. -Por causa disso, o próprio **FastAPI** fornece uma documentação alternativa da API (usando ReDoc), que você pode acessar em http://127.0.0.1:8000/redoc: +Por causa disso, o próprio **FastAPI** fornece uma documentação alternativa da API (usando ReDoc), que você pode acessar em [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc):
@@ -94,7 +94,7 @@ Da mesma forma, existem muitas ferramentas compatíveis. Incluindo ferramentas d ## Pydantic { #pydantic } -Toda a validação de dados é realizada nos bastidores pelo Pydantic, então você recebe todos os benefícios disso. E você sabe que está em boas mãos. +Toda a validação de dados é realizada nos bastidores pelo [Pydantic](https://docs.pydantic.dev/), então você recebe todos os benefícios disso. E você sabe que está em boas mãos. Você pode usar as mesmas declarações de tipo com `str`, `float`, `bool` e muitos outros tipos de dados complexos. @@ -122,7 +122,7 @@ A primeira sempre será usada, já que o path corresponde primeiro. ## Valores predefinidos { #predefined-values } -Se você tem uma *operação de rota* que recebe um *parâmetro de path*, mas quer que os valores válidos possíveis do *parâmetro de path* sejam predefinidos, você pode usar um `Enum` padrão do Python. +Se você tem uma *operação de rota* que recebe um *parâmetro de path*, mas quer que os valores válidos possíveis do *parâmetro de path* sejam predefinidos, você pode usar um `Enum` padrão do Python. ### Crie uma classe `Enum` { #create-an-enum-class } diff --git a/docs/pt/docs/tutorial/query-params-str-validations.md b/docs/pt/docs/tutorial/query-params-str-validations.md index b76b76a268..5ee41684a2 100644 --- a/docs/pt/docs/tutorial/query-params-str-validations.md +++ b/docs/pt/docs/tutorial/query-params-str-validations.md @@ -35,13 +35,13 @@ O FastAPI adicionou suporte a `Annotated` (e passou a recomendá-lo) na versão Se você tiver uma versão mais antiga, teria erros ao tentar usar `Annotated`. -Certifique-se de [Atualizar a versão do FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} para pelo menos 0.95.1 antes de usar `Annotated`. +Certifique-se de [Atualizar a versão do FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions) para pelo menos 0.95.1 antes de usar `Annotated`. /// ## Use `Annotated` no tipo do parâmetro `q` { #use-annotated-in-the-type-for-the-q-parameter } -Lembra que eu disse antes que `Annotated` pode ser usado para adicionar metadados aos seus parâmetros na [Introdução aos tipos do Python](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank}? +Lembra que eu disse antes que `Annotated` pode ser usado para adicionar metadados aos seus parâmetros na [Introdução aos tipos do Python](../python-types.md#type-hints-with-metadata-annotations)? Agora é a hora de usá-lo com FastAPI. 🚀 @@ -158,7 +158,7 @@ Você poderia chamar essa mesma função em outros lugares sem FastAPI, e ela fu Quando você não usa `Annotated` e em vez disso usa o estilo de valor padrão (antigo), se você chamar essa função sem FastAPI em outros lugares, terá que lembrar de passar os argumentos para a função para que funcione corretamente, caso contrário os valores serão diferentes do esperado (por exemplo, `QueryInfo` ou algo parecido em vez de `str`). E seu editor não vai avisar, e o Python também não vai reclamar ao executar a função, apenas quando as operações internas falharem. -Como `Annotated` pode ter mais de uma anotação de metadados, você agora pode até usar a mesma função com outras ferramentas, como o Typer. 🚀 +Como `Annotated` pode ter mais de uma anotação de metadados, você agora pode até usar a mesma função com outras ferramentas, como o [Typer](https://typer.tiangolo.com/). 🚀 ## Adicione mais validações { #add-more-validations } @@ -370,11 +370,11 @@ Podem existir casos em que você precise fazer alguma validação personalizada Nesses casos, você pode usar uma função validadora personalizada que é aplicada após a validação normal (por exemplo, depois de validar que o valor é uma `str`). -Você pode fazer isso usando o `AfterValidator` do Pydantic dentro de `Annotated`. +Você pode fazer isso usando o [`AfterValidator` do Pydantic](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) dentro de `Annotated`. /// tip | Dica -O Pydantic também tem `BeforeValidator` e outros. 🤓 +O Pydantic também tem [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) e outros. 🤓 /// diff --git a/docs/pt/docs/tutorial/query-params.md b/docs/pt/docs/tutorial/query-params.md index f429885660..472c12be64 100644 --- a/docs/pt/docs/tutorial/query-params.md +++ b/docs/pt/docs/tutorial/query-params.md @@ -129,7 +129,7 @@ Porém, quando você quiser fazer com que o parâmetro de consulta seja obrigat {* ../../docs_src/query_params/tutorial005_py310.py hl[6:7] *} -Aqui o parâmetro de consulta `needy` é um valor obrigatório, do tipo `str`. +Aqui o parâmetro da consulta `needy` é um valor obrigatório, do tipo `str`. Se você abrir no seu navegador a URL: @@ -182,6 +182,6 @@ Nesse caso, existem 3 parâmetros de consulta: /// tip | Dica -Você também poderia usar `Enum` da mesma forma que com [Path Parameters](path-params.md#predefined-values){.internal-link target=_blank}. +Você também poderia usar `Enum`s da mesma forma que com [Parâmetros de rota](path-params.md#predefined-values). /// diff --git a/docs/pt/docs/tutorial/request-forms.md b/docs/pt/docs/tutorial/request-forms.md index d255d0f9be..5b7c4d8090 100644 --- a/docs/pt/docs/tutorial/request-forms.md +++ b/docs/pt/docs/tutorial/request-forms.md @@ -4,9 +4,9 @@ Quando você precisar receber campos de formulário em vez de JSON, você pode u /// info | Informação -Para usar formulários, primeiro instale `python-multipart`. +Para usar formulários, primeiro instale [`python-multipart`](https://github.com/Kludex/python-multipart). -Certifique-se de criar um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, ativá-lo e então instalá-lo, por exemplo: +Certifique-se de criar um [ambiente virtual](../virtual-environments.md), ativá-lo e então instalá-lo, por exemplo: ```console $ pip install python-multipart @@ -56,7 +56,7 @@ Os dados dos formulários são normalmente codificados usando o "media type" `ap Mas quando o formulário inclui arquivos, ele é codificado como `multipart/form-data`. Você lerá sobre como lidar com arquivos no próximo capítulo. -Se você quiser ler mais sobre essas codificações e campos de formulário, vá para o MDN web docs para
POST. +Se você quiser ler mais sobre essas codificações e campos de formulário, vá para o [MDN web docs para `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST). /// diff --git a/docs/pt/docs/tutorial/response-model.md b/docs/pt/docs/tutorial/response-model.md index e3b97b630f..7a28bcecdd 100644 --- a/docs/pt/docs/tutorial/response-model.md +++ b/docs/pt/docs/tutorial/response-model.md @@ -13,6 +13,7 @@ O FastAPI usará este tipo de retorno para: * Adicionar um **JSON Schema** para a resposta, na *operação de rota* do OpenAPI. * Isso será usado pela **documentação automática**. * Também será usado por ferramentas de geração automática de código do cliente. +* **Serializar** os dados retornados para JSON usando Pydantic, que é escrito em **Rust**, então será **muito mais rápido**. Mas o mais importante: @@ -73,9 +74,9 @@ Aqui estamos declarando um modelo `UserIn`, ele conterá uma senha em texto simp /// info | Informação -Para usar `EmailStr`, primeiro instale `email-validator`. +Para usar `EmailStr`, primeiro instale [`email-validator`](https://github.com/JoshData/python-email-validator). -Certifique-se de criar um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, ative-o e instale-o, por exemplo: +Certifique-se de criar um [ambiente virtual](../virtual-environments.md), ative-o e então instale-o, por exemplo: ```console $ pip install email-validator @@ -181,7 +182,7 @@ Pode haver casos em que você retorna algo que não é um campo Pydantic válido ### Retorne uma Response diretamente { #return-a-response-directly } -O caso mais comum seria [retornar uma Response diretamente, conforme explicado posteriormente na documentação avançada](../advanced/response-directly.md){.internal-link target=_blank}. +O caso mais comum seria [retornar uma Response diretamente, conforme explicado posteriormente na documentação avançada](../advanced/response-directly.md). {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -257,7 +258,7 @@ Você também pode usar: * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -conforme descrito na documentação do Pydantic para `exclude_defaults` e `exclude_none`. +conforme descrito na [documentação do Pydantic](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict) para `exclude_defaults` e `exclude_none`. /// diff --git a/docs/pt/docs/tutorial/response-status-code.md b/docs/pt/docs/tutorial/response-status-code.md index a3f8d8a568..d5a81fa03b 100644 --- a/docs/pt/docs/tutorial/response-status-code.md +++ b/docs/pt/docs/tutorial/response-status-code.md @@ -20,7 +20,7 @@ O parâmetro `status_code` recebe um número com o código de status HTTP. /// info | Informação -`status_code` também pode receber um `IntEnum`, como o do Python `http.HTTPStatus`. +`status_code` também pode receber um `IntEnum`, como [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) do Python. /// @@ -66,7 +66,7 @@ Resumidamente: /// tip | Dica -Para saber mais sobre cada código de status e qual código serve para quê, verifique a documentação do MDN sobre códigos de status HTTP. +Para saber mais sobre cada código de status e qual código serve para quê, verifique a [documentação do MDN sobre códigos de status HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status). /// @@ -98,4 +98,4 @@ Você também pode usar `from starlette import status`. ## Alterando o padrão { #changing-the-default } -Mais tarde, no [Guia do Usuário Avançado](../advanced/response-change-status-code.md){.internal-link target=_blank}, você verá como retornar um código de status diferente do padrão que você está declarando aqui. +Mais tarde, no [Guia do Usuário Avançado](../advanced/response-change-status-code.md), você verá como retornar um código de status diferente do padrão que você está declarando aqui. diff --git a/docs/pt/docs/virtual-environments.md b/docs/pt/docs/virtual-environments.md index e222c61ad6..cfb86887fd 100644 --- a/docs/pt/docs/virtual-environments.md +++ b/docs/pt/docs/virtual-environments.md @@ -22,7 +22,7 @@ Um **ambiente virtual** é um diretório com alguns arquivos. Esta página lhe ensinará como usar **ambientes virtuais** e como eles funcionam. -Se você estiver pronto para adotar uma **ferramenta que gerencia tudo** para você (incluindo a instalação do Python), experimente uv. +Se você estiver pronto para adotar uma **ferramenta que gerencia tudo** para você (incluindo a instalação do Python), experimente [uv](https://github.com/astral-sh/uv). /// @@ -86,7 +86,7 @@ $ python -m venv .venv //// tab | `uv` -Se você tiver o `uv` instalado, poderá usá-lo para criar um ambiente virtual. +Se você tiver [`uv`](https://github.com/astral-sh/uv) instalado, poderá usá-lo para criar um ambiente virtual.@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -Ou se você usa o Bash para Windows (por exemplo, Git Bash): +Ou se você usa o Bash para Windows (por exemplo, [Git Bash](https://gitforwindows.org/)):@@ -216,7 +216,7 @@ Se ele mostrar o binário `python` em `.venv\Scripts\python`, dentro do seu proj /// tip | Dica -Se você usar `uv`, você o usará para instalar coisas em vez do `pip`, então não precisará atualizar o `pip`. 😎 +Se você usar [`uv`](https://github.com/astral-sh/uv), você o usará para instalar coisas em vez do `pip`, então não precisará atualizar o `pip`. 😎 /// @@ -268,7 +268,7 @@ Se você estiver usando **Git** (você deveria), adicione um arquivo `.gitignore /// tip | Dica -Se você usou `uv` para criar o ambiente virtual, ele já fez isso para você, você pode pular esta etapa. 😎 +Se você usou [`uv`](https://github.com/astral-sh/uv) para criar o ambiente virtual, ele já fez isso para você, você pode pular esta etapa. 😎 /// @@ -340,7 +340,7 @@ $ pip install "fastapi[standard]" //// tab | `uv` -Se você tem o `uv`: +Se você tem o [`uv`](https://github.com/astral-sh/uv):@@ -372,7 +372,7 @@ $ pip install -r requirements.txt //// tab | `uv` -Se você tem o `uv`: +Se você tem o [`uv`](https://github.com/astral-sh/uv):@@ -416,8 +416,8 @@ Você provavelmente usaria um editor. Certifique-se de configurá-lo para usar o Por exemplo: -* VS Code -* PyCharm +* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment) +* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html) /// tip | Dica @@ -455,7 +455,7 @@ Continue lendo. 👇🤓 ## Por que ambientes virtuais { #why-virtual-environments } -Para trabalhar com o FastAPI, você precisa instalar o Python. +Para trabalhar com o FastAPI, você precisa instalar o [Python](https://www.python.org/). Depois disso, você precisará **instalar** o FastAPI e quaisquer outros **pacotes** que queira usar. @@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"-Isso fará o download de um arquivo compactado com o código FastAPI, normalmente do PyPI. +Isso fará o download de um arquivo compactado com o código FastAPI, normalmente do [PyPI](https://pypi.org/project/fastapi/). Ele também fará o **download** de arquivos para outros pacotes dos quais o FastAPI depende. @@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1 //// tab | Windows Bash -Ou se você usa o Bash para Windows (por exemplo, Git Bash): +Ou se você usa o Bash para Windows (por exemplo, [Git Bash](https://gitforwindows.org/)):@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate //// -Esse comando criará ou modificará algumas [variáveis de ambiente](environment-variables.md){.internal-link target=_blank} que estarão disponíveis para os próximos comandos. +Esse comando criará ou modificará algumas [variáveis de ambiente](environment-variables.md) que estarão disponíveis para os próximos comandos. Uma dessas variáveis é a variável `PATH`. /// tip | Dica -Você pode aprender mais sobre a variável de ambiente `PATH` na seção [Variáveis de ambiente](environment-variables.md#path-environment-variable){.internal-link target=_blank}. +Você pode aprender mais sobre a variável de ambiente `PATH` na seção [Variáveis de ambiente](environment-variables.md#path-environment-variable). /// @@ -846,7 +846,7 @@ Este é um guia simples para você começar e lhe ensinar como tudo funciona **p Existem muitas **alternativas** para gerenciar ambientes virtuais, dependências de pacotes (requisitos) e projetos. -Quando estiver pronto e quiser usar uma ferramenta para **gerenciar todo o projeto**, dependências de pacotes, ambientes virtuais, etc., sugiro que você experimente o uv. +Quando estiver pronto e quiser usar uma ferramenta para **gerenciar todo o projeto**, dependências de pacotes, ambientes virtuais, etc., sugiro que você experimente o [uv](https://github.com/astral-sh/uv). `uv` pode fazer muitas coisas, ele pode: