Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/iarleyibiapina/api_laravel

Projeto criado com ênfase em API, com o objetivo de criar um CRUD e relacionar consultas com o banco havendo duas colunas: Nome e Conteúdo de uma Noticia.
https://github.com/iarleyibiapina/api_laravel

Last synced: about 2 months ago
JSON representation

Projeto criado com ênfase em API, com o objetivo de criar um CRUD e relacionar consultas com o banco havendo duas colunas: Nome e Conteúdo de uma Noticia.

Awesome Lists containing this project

README

        

Projeto focado em API

A ideia é criar um sistema que forneça dados de uma noticia (CRUD), ele possui autenticação JWT sendo necessária um registro de um usuario para consumir os dados de uma noticia.

# Para executar:

Primeiramente faça uma cópia do projeto

```

git clone https://github.com/iarleyibiapina/Api_Laravel.git

```

Após isso entre na pasta do projeto e inicie em seu editor de cógigo, neste caso estarei me baseando no Visual Studio Code.

> Para entrar na pasta

```

cd Api_Laravel/

```

> Abrir o projeto no vsCode

```

code .

```


Abra o terminal e instale as dependencias do composer com:

```

composer install

```

e aguarde a instalação


Ainda no terminal:


Gere uma chave de encriptação do Laravel:

```

php artisan key:generate

```

Gere uma chave secreta para o JWT

```

php artisan jwt:secret

```


Agora dentro do projeto é preciso configurar uma conexao ao banco de dados

E para isto, faça uma cópia do arquivo `.env.example` retirando o sufixo `.example`
ou abrir o terminal no vsCode com 'ctrl + j' usar este comando:

```

cp .env.example .env

```

Este comando irá criar uma copia do arquivo de configuração do projeto e você precisará definir:

> Importante que você crie seu Banco de Dados MySql. Neste exemplo irei utilizar um banco de dados que havia criado chamado 'teste'.

> Para trabalhar com mysql estarei utilizando um servidor local chamado XAMPP, onde o módulo MySQL configurado na porta 3306 está ativo.

- DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
- DB_PORT=3306
- DB_DATABASE=teste
- DB_USERNAME=root
- DB_PASSWORD=

Por fim executar o comando 'migrate' para criar as novas tabelas no banco.

```

php artisan migrate

```

Para complementar o projeto, você tambem pode criar alguns dados falsos para melhor testar a API utilizando este comando:

```

php artisan db:seed --class=NoticiasSeeder

```

Este comando irá criar 20 linhas falsas na tabela noticias no banco.

```

php artisan db:seed --class=UserSeeder

```

Este comando irá criar um usuario falso na tabela users no banco.


Por fim, iniciar o servidor local para consumir a API.

```

php artisan serve --port=9000

```

A flag `--port` é opcional, neste caso estarei iniciando na porta 9000 pois a padrão é a porta 8000 e você pode testar utilizando com outros projetos locais.


# Para testar:

Existem várias ferramentas externas para testar uma API, sendo uma delas:
Curl, Swagger, PostMan, StopLight.
Recomendo utilizar o PostMan, pois é uma ferramenta mais completa.

Os endpoints para fazer as requisições são:

### Usuarios

- Registrando no sistema, retornando o token JWT

> Enviar como Params - key, exatamente:

> name

> email

> password

```

POST 'sistema/registrar'

```

- Fazer um login no sistema.

> Enviar como Params - key, exatamente:

> email

> password

```

POST 'sistema/logar'

```

### Após logar será retornado a chave JWT que será necessária para as próximas requisições.

> A chave fica em: Data -> token , copie toda a chave para utilizar posteriormente.

A partir de agora as rotas estarão protegidas, isso significa que nenhum usuario não logado no sistema poderá consumir estas rotas e que para utiliza-las é preciso definir a chave recuperada no login

> A chave precisa ser adicionada em:

> Authorization -> token bearer

> e copiada no campo ao lado

![Adicionando Chave JWT](/public/readme/adicionando_chave_jwt.png)


- Retorna o usuario logado neste momento.

```

GET 'user/'

```

- Retorna uma lista de todos os usuarios cadastrados no sistema.

```

GET 'sistema/usuarios'

```

- Faz logout no sistema

```

GET 'sistema/logout'

```

### Noticias

> Ainda utilizando a chave em authorization!

- Pegando todas as noticias

```

GET 'sistema/noticias'

```

- Pegando uma noticia pelo ID

```

GET 'sistemas/noticias/1'

```

> ATENÇÃO


> Para enviar dados via metodo Post e PUT, é preciso definir em 'PARAMS'
> a chave do input e o valor, que serão enviados.

> A chaves precisam ser exatamente:

> 'nome_noticia'

> 'conteudo_noticia'

- Fazendo envio de dados de uma noticia

```

POST 'sitemas/noticias/1'

```

- Atualizando dados de uma noticia

```

PUT 'sistemas/noticias/1'

```

- Deletando uma noticia

```

DELETE 'sistemas/noticias/1'

```


##

Exemplos de uso do PostMan:

Metodo GET - all

![Exemplo GET - all](/public/readme/getAll.png)

Metodo GET - ById

![Exemplo GET - ById](/public/readme/getById.png)

Metodo POST

![Exemplo POST](/public/readme/post.png)

Metodo PUT

![Exemplo PUT](/public/readme/put.png)

Metodo DELETE

![Exemplo DELETE](/public/readme/delete.png)

Estrutura do projeto

# Banco de dados:

Após a migration duas colunas são criadas sendo elas:

- Nome da noticia
- Conteudo da noticia

Após isso foi Criado uma NoticiaModel,
Defini dentro do model:

- O nome da tabela
- O nome da coluna da chave primaria (pois por padrão busca por 'id' e eu modifiquei para 'id_noticia_tbn');
- Os campos que podem ser preenchidos (no caso apenas nome e conteudo)


# Controller e Rotas

Criado um `NoticiaController` por meio do comando

```

'php artisan make:controller NoticiaController -r'

```

adicionei a flag '-r' - que significa 'Resources' utilizando esta tag é criado um controller com funções já pre definidas para serem trabalhadas como API.


Em rotas:
supondo que estou criando uma api de um sistema existente.
então resolvi criar uma nomenclatura 'sistema' simulando uma url ja existente e logo após a rota para consumir dados da noticia


# Noticia Controller

Index - Retorna todas as noticias

Store - Armazena a noticia

Show - Exibe uma noticia passada como parametro

Update - Atualiza uma noticia passada como parametro

Delete - Deleta uma noticia passada como parametro


# Faker

Faker é uma livraria externa que fornece dados falsos, muito utilizada para testar funcionalidades que precisam de dados.

O laravel possui uma função nativa `fake()` - que usa esta biblioteca e gera dados falsos

neste caso foi criado uma `Factory` nomeada de NoticiasModelFactory dentro de Database\Factory.

- Factory, em laravel é um 'espaço' que tem como função gerar dados em grande quantidade, uma Fábrica de dados que foi utilizada para gerar dados falsos para testes.

E em Database\Seeders, um `NoticiasSeeder`, uma seeder tem como função 'chamar' uma factory executar e enviar para o banco de Dados.

User Seeder

Gera um usuario para testar resgistro, login e chave de JWT token

php artisan db:seed --class=UserSeeder

A senha padrão para usuario criado via seeder é: password