eduardojansen/laravel8-api-restfull

Repository files navigation

Esse projeto contempla o desenvolvimento de uma API RESTful de cadastro simples de produtos usando Laravel 8 em um ambiente docker com PHP na versão 8. O objetivo foi testar pequenas funcionalidades, como CRUD usando API REST, cadastro apenas por usuário autenticado com passagem de token no header da requisição, logs de alteração sendo armazenados no bando de dados e testes com HTTP Tests.

Clone o repositório

$ git clone [email protected]:eduardojansen/laravel8-api-restfull.git

Depois de clonar o sistema, é necessário instalar as dependências.

$ cd laravel8-api-restfull
$ docker run --rm --interactive --tty --volume $PWD:/app composer install

Para gerenciar o ambiente Docker com o Sail, basta executar o arquivo ./vendor/bin/sail e em seguida o comando que você precisa executar.

O comando para “subir” o ambiente Docker do Laravel Sail é:

vendor/bin/sail up

Para rodar em background

vendor/bin/sail up -d

Para parar o servidor basta teclar ctrl+c ou, se estiver rodando em background, o comando vendor/bin/sail down.

Para acessar o projeto no navegador, basta acessar http://localhost/

Executar o comando Seed para que seja criado o usuário de testes da aplicação

vendor/bin/sail artisan db:seed

Todos os endpoints da API são acessíveis apenas para usuários autenticados. O usuário possui um token e esse token precisa ser enviado no cabeçalho de cada requisição, caso contrário será retornando um erro HTTP 401.

API Token para testes

fKXxVoVBbNcEm1sGcAW0S0hbCcro5C6AnCdPI56dXYNJmuSbv8wlPRCAN5DKKtFm17K55Y7F9OJXDONp

Para testar a API, basta utilizar um software como o Postman ou Insominia. Para informar o token procure a opção de Authentication e seleciona o tipo Bearer Token, e informe o token acima.

Adicionar no Header das requisições:

  • Content-Type
    • application/json
  • Accept
    • application/json

Requisições para a API devem seguir os padrões:

MétodoDescrição
GETRetorna informações de um ou mais registros.
POSTUtilizado para criar um novo registro.
PUTAtualiza dados de um registro.
DELETERemove um registro do sistema.
CódigoDescrição
200Requisição executada com sucesso (success).
400Erros de validação ou os campos informados não existem no sistema.
401Usuário não autenticado no sistema.
404Registro pesquisado não encontrado (Not found).
405Método não implementado.
204indica que a solicitação foi bem sucedida. Utilizado após remoção com sucesso de um registro.
422Erro de valiação. Dados informados estão fora do escopo definido para o campo.

Os campos obrigatórios para cadastro do produto são name e code e ambos são únicos, pois não podem ser repetidos no sistema.

Endpoint:

POST http://localhost/api/v1/products
ParâmetroDescrição
codeInformar código único do produto
nameInformar nome único do produto.
quantityInformar a quantidade do produto.
sizeInformar o tamanho do produto
compositionInformar a composição do produto
  • Request (application/json)

    • Body

        {
            "code": "99999",
            "name": "Kit Masculino",
            "quantity": "10",
            "size": "G",
            "composition": "Uma camisa e uma bermuda"
        }
      
  • Response 200 (application/json)

    • Body

        {
            "data": {
                "code": "99999",
                "name": "Kit Masculino",
                "quantity": "10",
                "size": "G",
                "composition": "Uma camisa e uma bermuda",
                "updated_at": "2021-04-04T14:34:27.000000Z",
                "created_at": "2021-04-04T14:34:27.000000Z",
                "id": 3
            }
        }
      

Exemplo de atualização apenas do código de um produto.

Endpoint:

PUT http://localhost/api/v1/products/ID-PRODUCT
  • Request (application/json)

    • Body

        {
            "code": "8888",
        }
      
  • Response 200 (application/json)

    • Body

        {
            "data": {
                "code": "8888",
                "name": "Kit Masculino",
                "quantity": "10",
                "size": "G",
                "composition": "Uma camisa e uma bermuda",
                "updated_at": "2021-04-04T14:34:27.000000Z",
                "created_at": "2021-04-04T14:34:27.000000Z",
                "id": 3
            }
        }
      

Endpoint:

GET http://localhost/api/v1/products/ID-PRODUCT
  • Response 200 (application/json)

    • Body

        {
            "data": [
                {
                    "id": 1,
                    "name": "Kit Masculino",
                    "code": "999",
                    "size": "G",
                    "composition": "Uma camisa e uma bermuda",
                    "quantity": 5,
                    "created_at": "2021-04-04T15:35:57.000000Z",
                    "updated_at": "2021-04-04T15:35:57.000000Z"
                }
            ]
        }
      

Endpoint:

GET http://localhost/api/v1/products
  • Response 200 (application/json)

    • Body

        {
            "data": [
                {
                    "id": 1,
                    "name": "Kit Masculino",
                    "code": "999",
                    "size": "G",
                    "composition": "Uma camisa e uma bermuda",
                    "quantity": 5,
                    "created_at": "2021-04-04T15:35:57.000000Z",
                    "updated_at": "2021-04-04T15:35:57.000000Z"
                },
                {
                    "id": 2,
                    "name": "Kit Feminino",
                    "code": "888",
                    "size": "G",
                    "composition": "Uma camisa e uma bermuda",
                    "quantity": 10,
                    "created_at": "2021-04-04T15:36:55.000000Z",
                    "updated_at": "2021-04-04T15:36:55.000000Z"
                }
            ]
        }
      

Endpoint:

DELETE http://localhost/api/v1/products/ID-PRODUCT
  • Response 204 (No Content)

Todos os logs de alterações nos registros estão sendo armazenadas na tabela activity_log

About

API RESTful simples para cadastro de produtos usando Laravel 8 em um ambiente docker com PHP na versão 8.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published