Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/iarleyibiapina/api_laravel
- Owner: iarleyibiapina
- Created: 2024-02-01T17:47:21.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-02-09T21:25:13.000Z (11 months ago)
- Last Synced: 2024-02-09T22:29:31.104Z (11 months ago)
- Language: PHP
- Size: 396 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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
> password```
POST 'sistema/registrar'
```
- Fazer um login no sistema.
> Enviar como Params - key, exatamente:
> 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 noticiaApó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