An open API service indexing awesome lists of open source software.

https://github.com/marcoscapiberibe/crud_flask

CRUD com Flask
https://github.com/marcoscapiberibe/crud_flask

Last synced: 3 months ago
JSON representation

CRUD com Flask

Awesome Lists containing this project

README

        


API de Cadastro de Empresas


Esta API RESTful foi desenvolvida para o gerenciamento de empresas, utilizando Flask, JWT para autenticação, SQLAlchemy para integração com um banco de dados relacional e Swagger para documentação dos endpoints.



Requisitos



  • Python 3.x


  • Pip (gerenciador de pacotes do Python)

  • SQLite



Instalação




  1. Clone o repositório:


    git clone https://github.com/marcoscapiberibe/CRUD_Flask.git
    
    cd CRUD_Flask



  2. Crie e ative um ambiente virtual:


    python3 -m venv env
    
    source env/bin/activate



  3. Instale as dependências:


    pip3 install -r requirements.txt
    



  4. Instale mais essas dependências:


    pip3 install flask flask-cors flask-migrate flask_swagger_ui marshmallow PyJWT
    



  5. Configure o banco de dados:

    O projeto usa SQLite por padrão. Se desejar usar PostgreSQL ou MySQL, configure a variável SQLALCHEMY_DATABASE_URI no arquivo config.py.


    Para criar o banco de dados e aplicar as migrações, execute:


    flask db upgrade
    



  6. Configure as variáveis de ambiente (necessário caso a API não rode de primeira; caso contrário, você pode ignorar esta etapa):

    Crie um arquivo .env com as seguintes variáveis:


    SECRET_KEY='minha_chave_secreta'
    



  7. Execute a aplicação:


    python run.py
    

    A API estará disponível em http://127.0.0.1:5000.





Endpoints



Autenticação




  • Login: POST /login

    • Body (JSON):
      {
      
      "username": "admin",
      "password": "senha654321"
      }


    • Retorna um token JWT que deve ser usado para acessar os outros endpoints.





Empresas




  • Criar Empresa: POST /empresa



    • Header:
      Authorization: Bearer <SEU_TOKEN_JWT>
      


    • Body (JSON):
      {
      
      "cnpj": "00000000000100",
      "nome_razao": "Empresa Exemplo S.A.",
      "nome_fantasia": "Exemplo",
      "cnae": "6201502"
      }





  • Listar Empresas (com paginação): GET /empresas?start=0&limit=10&sort=nome_razao&dir=asc




  • Atualizar Empresa: PUT /empresa/<cnpj>



    • Header:
      Authorization: Bearer <SEU_TOKEN_JWT>
      


    • Body (JSON):
      {
      
      "nome_fantasia": "Novo Nome Fantasia",
      "cnae": "6201502"
      }





  • Deletar Empresa: DELETE /empresa/<cnpj>



    • Header:
      Authorization: Bearer <SEU_TOKEN_JWT>
      






Documentação Swagger


A API possui uma documentação interativa via Swagger, que permite visualizar e testar todos os endpoints diretamente no navegador.




  1. Após iniciar a aplicação, acesse a documentação Swagger em:


    http://127.0.0.1:5000/swagger/
    



  2. No Swagger, você pode testar diretamente os endpoints fornecendo o token JWT de autenticação.



    • Para testar os endpoints protegidos, faça login e copie o token JWT retornado.

    • No Swagger, clique em Authorize e cole o token no formato: Bearer <SEU_TOKEN_JWT>.

    • Agora você pode executar as operações CRUD diretamente pela interface do Swagger.





Testando a API


Você pode testar a API usando Postman, cURL, ou a interface do Swagger.



Exemplo de cURL para Criar uma Empresa:


curl -X POST http://127.0.0.1:5000/empresa \

-H "Authorization: Bearer <SEU_TOKEN_JWT>" \
-H "Content-Type: application/json" \
-d '{
"cnpj": "00000000000100",
"nome_razao": "Empresa Exemplo",
"nome_fantasia": "Exemplo",
"cnae": "6201502"
}'



Considerações Importantes




  • JWT: Todos os endpoints de CRUD (criar, atualizar, deletar empresas) exigem um token JWT para autenticação.


  • Documentação Swagger: A interface do Swagger facilita o teste de todos os endpoints de maneira interativa.


  • Banco de Dados: Para alterar o banco de dados de SQLite para PostgreSQL ou MySQL, modifique a configuração no arquivo config.py e ajuste o URI de conexão de acordo com o banco de dados desejado.