---
# System prepended metadata

title: Criação da API

---

# Criação da API
## Considerações Iniciais:
Este tutorial fez uso dos seguintes parâmetros:

**Sistema Operacional:** Arch Linux x86_64
**Kernel:** 6.1.6-arch1-1
**Linguagem:** Python 3.11
**Framework**: Flask 2.2


## Configuração do Ambiente:
Inicialmente, é aconselhável criar um ambiente virtual utilizando-se do módulo venv presente no python:

```shell
python3.11 -m venv venv
```

Em seguida, é necessário ativá-lo:

```shell
source venv/bin/activate
```

Caso deseje desativar, é apenas necessário escrever:

```shell
deactivate
```

Em seguida é necessário instalar o framework flask:
> Essa instalação é feita a partir do pip, o gerenciador de pacotes python.

```
pip install flask flask_restful
```

Pronto, agora já temos tudo o que é necessário para criar a aplicação.

## Criando a API:

> O exemplo a ser demonstrado será de um ToDo list, algo bem simples, contudo bem informativo.

Inicialmente iremos importar as bibliotecas necessárias, além de instânciar o objeto Flask, informando-o o nome do arquivo onde está o código, juntamente a isso, também instânciamos a API e, por fim, preenchemos um pequeno conjunto de de tarefas:

```python
from flask import Flask
from flask_restful import reqparse, abort, Api, Resource

app = Flask(__name__)
api = Api(app)

TODOS = {
    "todo1": {"task": "Fazer Tutorial"},
    "todo2": {"task": "Fazer Arquitetura"},
    "todo3": {"task": "Estudar para prova"},
    "todo4": {"task": "Fazer atividades"},
}
```

Após isso, criaremos a classe responsável por responder as requisições para pegar uma tarefa, atualizá-la ou deletá-la:

```python
def abort_if_todo_doesnt_exist(todo_id):
    if todo_id not in TODOS:
        abort(404, message=f"Todo {todo_id} doesn't exist")

        
class Todo(Resource):
    def get(self, todo_id):
        abort_if_todo_doesnt_exist(todo_id)
        return TODOS[todo_id]

    def delete(self, todo_id):
        abort_if_todo_doesnt_exist(todo_id)
        del TODOS[todo_id]
        return "", 204

    def put(self, todo_id):
        args = parser.parse_args()
        task = {"task": args["task"]}
        TODOS[todo_id] = task
        return task, 201

```
E em seguida associamos um *EndPoint* a essa classe e configuramos o código para rodar a aplicação ao executarmos o arquivo com o interpretador:

```python
api.add_resource(Todo, "/todo/<todo_id>")

if __name__ == "__main__":
    app.run(debug=True)
```

Agora vamos executar:
![](https://i.imgur.com/eJL2p38.png)

Bom, agora a aplicação está rodando no endereço `http://127.0.0.1:5000` e para acessá-lo com os verbos HTTP iremos utilizar o **curl**, o qual é um projeto de software de computador que fornece uma biblioteca e uma ferramenta de linha de comando para transferir dados usando vários protocolos:

Primeiramente usaremos o verbo GET:

![](https://i.imgur.com/CNkH1fA.png)

O verbo PUT:

![](https://i.imgur.com/QLvmAnd.png)

Agora se olharmos novamente o "todo3", encontraremos outra atividade.
![](https://i.imgur.com/PMpDT8M.png)

Por fim, agora usaremos o verbo DELETE:
![](https://i.imgur.com/axayu2m.png)

Bom agora com isso feito precisamos conseguir adicionar ou listar todas as tarefas, assim como numa API REST. Para isso criaremos outra classe e a associaremos a outro *EndPoint*:

```python
class TodoList(Resource):
    def get(self):
        return TODOS

    def post(self):
        args = parser.parse_args()
        todo_id = int(max(TODOS.keys()).lstrip("todo")) + 1
        todo_id = "todo%i" % todo_id
        TODOS[todo_id] = {"task": args["task"]}
        return TODOS[todo_id], 201


api.add_resource(TodoList, "/todos")
```

Agora usaremos o verbo GET, para pegar todas as tarefas:
![](https://i.imgur.com/z0jmnAX.png)

Agora adicionaremos mais uma tarefa com o verbo POST:
![](https://i.imgur.com/jWqgxjX.png)

E agora se usarmos o GET novamente, a tarefa estará lá:
![](https://i.imgur.com/evIRva0.png)
![](https://i.imgur.com/O1zwskG.png)

Pronto, agora temos uma API que podemos adicionar, remover, atualizar e ver tarefas.