Skip to content

Commit

Permalink
Melhorias de legibilidade em tags nas aulas 02 e 03
Browse files Browse the repository at this point in the history
  • Loading branch information
dunossauro committed Jan 9, 2025
1 parent fceda05 commit 9d95127
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
10 changes: 5 additions & 5 deletions aulas/02.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ def read_root():
return {'message': 'Olá Mundo!'}
```

Quando realizamos a requisição via navegador, o verbo padrão é o GET. Por isso, obtemos na tela a mensagem `{'message': 'Olá Mundo!'}`.
Quando realizamos a requisição via navegador, o verbo padrão é o GET. Por isso, obtemos na tela a mensagem `#!python {'message': 'Olá Mundo!'}`.

![Captura de tela do navegador acessando "http://127.0.0.1"](assets/02/nagevador_com_localhost.png){: .center .shadow }

Expand Down Expand Up @@ -312,7 +312,7 @@ Assim, podemos ir ao terceiro pilar do desenvolvimento web que são os conteúdo
#### HTML

!!! example "Sobre o código apresentado nesse tópico!"
Todo o código apresentado neste tópico é apenas um exemplo básico do uso de HTML com FastAPI e não será utilizado no curso. No entanto, é extremamente importante mencionar este tópico.
Todo o código apresentado neste tópico é apenas um exemplo básico do uso de HTML com FastAPI e não será utilizado no curso. No entanto, é extremamente importante mencionar este tópico. **Para uma visão um pouco mais aprofundada, temos um [tópico no apêndice B](/apendices/b_proximos_passos/#templates){:target="_blank"} focado em html + css.**

Embora este tópico abranja apenas HTML puro, o FastAPI pode utilizar [Jinja](https://jinja.palletsprojects.com/){:target="_blank"} como sistema de templates para uma aplicação mais eficiente.

Expand All @@ -322,9 +322,9 @@ Assim, podemos ir ao terceiro pilar do desenvolvimento web que são os conteúdo

A documentação do FastAPI também oferece um tópico focado em [Templates](https://fastapi.tiangolo.com/pt/advanced/templates/){:target="_blank"}.

O terceiro pilar fundamental da web é o HTML, sigla para *Hypertext Markup Language*. Trata-se da linguagem de marcação padrão usada para criar e estruturar páginas na internet. Quando acessamos um site, o que vemos em nossos navegadores é o resultado da interpretação do HTML. Esta linguagem utiliza uma série de 'tags' – como `<html>`, `<head>`, `<body>`, `<h1>`, `<p>` e outras – para definir a estrutura e o conteúdo de uma página web.
O terceiro pilar fundamental da web é o HTML, sigla para *Hypertext Markup Language*. Trata-se da linguagem de marcação padrão usada para criar e estruturar páginas na internet. Quando acessamos um site, o que vemos em nossos navegadores é o resultado da interpretação do HTML. Esta linguagem utiliza uma série de 'tags' – como `#!html <html>`, `#!html <head>`, `#!html <body>`, `#!html <h1>`, `#!html <p>` e outras – para definir a estrutura e o conteúdo de uma página web.

A beleza do HTML reside em sua simplicidade e eficácia. Mais do que uma linguagem, é uma forma de organizar e apresentar informações na web. Cada tag tem um propósito específico: `<h1>` a `<h6>` são usadas para títulos e subtítulos; `<p>` para parágrafos; `<a>` para links; enquanto `<div>` e `<span>` auxiliam na organização e estilo do conteúdo. Juntas, essas tags formam a espinha dorsal de quase todas as páginas da internet.
A beleza do HTML reside em sua simplicidade e eficácia. Mais do que uma linguagem, é uma forma de organizar e apresentar informações na web. Cada tag tem um propósito específico: `#!html <h1>` a `#!html <h6>` são usadas para títulos e subtítulos; `#!html <p>` para parágrafos; `#!html <a>` para links; enquanto `#!html <div>` e `#!html <span>` auxiliam na organização e estilo do conteúdo. Juntas, essas tags formam a espinha dorsal de quase todas as páginas da internet.

Se nosso objetivo fosse apresentar um HTML simples, poderíamos usar a classe de resposta `HTMLResponse`:

Expand Down Expand Up @@ -565,7 +565,7 @@ Com essa abordagem, ao iniciar o servidor (`task run`) e acessar a Swagger UI em

![Captura de tele do Swagger UI mostrando o json schema de "Message" que definimos no FastAPI](assets/02/captura_de_tela_do_swagger_mostrando_o_schema_de_message.png){: .center .shadow }

Além disso, na seção de `Responses`, temos um exemplo claro da saída esperada do endpoint: `{"message": "string"}`. Isso ilustra como a API irá responder, especificando que o campo obrigatório `"message"` será retornado com um valor do tipo `"string"`.
Além disso, na seção de `Responses`, temos um exemplo claro da saída esperada do endpoint: `#!python {"message": "string"}`. Isso ilustra como a API irá responder, especificando que o campo obrigatório `"message"` será retornado com um valor do tipo `"string"`.


## Exercício
Expand Down
6 changes: 5 additions & 1 deletion aulas/03.md
Original file line number Diff line number Diff line change
Expand Up @@ -484,20 +484,24 @@ Nosso teste da rota GET tem que verificar se a recuperação dos usuários está

Com as rotas POST e GET implementadas, agora podemos criar e recuperar usuários. Implementaremos a próxima operação CRUD: Update.


!!! warning "Coisas que devemos considerar sobre este e os próximos testes"
Note que para que esse teste seja executado com sucesso o teste do endpoint de `POST` tem que ser executado antes. Isso é problemático no mundo dos testes. Pois cada teste deve estar isolado e não depender da execução de nada externo a ele.

Para que isso aconteça, precisaremos de um mecanismo que reinicie o banco de dados a cada teste, mas ainda não temos um banco de dados real. O banco de dados será introduzido na aplicação na [aula 04](04.md).

O mecanismo que fará com que os testes não interfiram em outros e sejam independentes será introduzido na [aula 05](05.md/#testando-o-endpoint-post-users-com-pytest-e-fixtures).


## Implementando a Rota PUT

A rota PUT é usada para atualizar as informações de um usuário existente. No contexto do CRUD, o verbo HTTP PUT está associado à operação "Update". Se a solicitação for bem-sucedida, a rota deve retornar o status HTTP 200 (OK). No entanto, se o usuário solicitado não for encontrado, deveríamos retornar o status HTTP 404 (Não Encontrado).

Uma característica importante do verbo PUT é que ele é direcionado a um recurso em específico. Nesse caso, estamos direcionando a alteração a um `user` em específico na base de dados. O identificador de `user` é o campo `id` que estamos usando nos modelos do Pydantic. Nesse caso, nosso endpoint deve receber o identificador de quem será alterado.

Para fazer essa identificação do recurso na [URL](02.md/#url){:target="_blank"} usamos a seguinte combinação `/caminho/recurso`. Mas, como o recurso é dinâmico, ele deve ser enviado pelo cliente. Fazendo com que o valor tenha que ser uma variável. Dentro do FastAPI, as variáveis de recursos são descritas dentro de {}, como `{user_id}`. Fazendo com que o caminho completo do nosso endpoint seja `#!python '/users/{user_id}'`. Da seguinte forma:
Para fazer essa identificação do recurso na [URL](02.md/#url){:target="_blank"} usamos a seguinte combinação `/caminho/recurso`. Mas, como o recurso é dinâmico, ele deve ser enviado pelo cliente. Fazendo com que o valor tenha que ser uma variável.

Dentro do FastAPI, as variáveis de recursos são descritas dentro de {}, como `{user_id}`. Fazendo com que o caminho completo do nosso endpoint seja `#!python '/users/{user_id}'`. Da seguinte forma:

```python title="fast_zero/app.py" hl_lines="5 6"
--8<-- "aulas/codigos/03/fast_zero/app.py:69:83"
Expand Down

0 comments on commit 9d95127

Please sign in to comment.