Desenvolvimento de APIs RESTFul com Laravel



Neste blog você aprenderá como criar APIs RESTFul no LARAVEL com autenticação OAuth 2, via token, utilizando o Laravel Passport, de forma prática e focada na manutenção da aplicação. Criaremos uma trait com repository para que possa ser plugada em nossos controllers, tendo assim o menor trabalho possível para manipularmos nossas APIs de forma segura, sem alterar o processo padrão de autenticação do Laravel.

  • Passo um vamos criar um projeto laravel, para isso executar o comando abaixo via composer.

composer create-project --prefer-dist laravel/laravel apirest "5.7.*"
  •  Passo dois após o projeto ser baixado vamos vamos criar o nosso arquivo de configuração .ENV  na raiz do projeto que ficara assim.


  • Passo Três após o arquivo .ENV ser criado vamos baixar as dependencias do laravel usando o composer rodando o seguindo comando no terminal.

composer install


  • Passo Quatro após as dependências serem instaladas no laravel  vamos criar nosso KEY GENERATE  para poder rodar nossa aplicação usando o seguinte comando.

php artisan key:generate


  • Quinto passo vamos entrar no nosso PgAdminIII e vamos criar nosso banco de dados Postgres que vamos chamar de apirest ficara mais o menos dessa forma:


  • Sexto passo agora que já temos nosso banco de dados criado e nosso projeto já tem todas as depencias instaladas vamos criar nossas primeiras tabelas para popular nosso banco de dados usando as MIGRATION DO LARAVEL para isso vamos criar a tabela de usuario usando o comando MAKE do Laravel.

php artisan make:auth
  • Esse comando vai criar a estrutura de autenticação de usuario do laravel.
  • Feito esse procedimento precisamos agora popular nossa migration de usuario ao nosso banco de dados que criamos nos passos anteriores, como vamos fazer isso ?
  • essa resposta e bem facil basta usarmos o artisan para isso fazendo o seguinte comando.


php artisan migrate

  • Fazendo isso teremos nosso banco de dados pupulado com as nossas migration que e um espelho de nosso banco de dados.







  • Se olharmos a nossa estrutura de banco de dados que estava vazia veremos que tem uma tabela chamada user que vai esta parecendo com isso.





  • Setimo passo podemos agora rodar nosso  projeto  e testa inserir um usuario no nosso banco de dados pela tela de autenticação criada pelo comando make:auth que sera dessa forma.




php artisan serve

  • Use o comando assima para poder rodar o servidor e testa o laravel por default ele ira rodar na porta 8000, mais se por algum motivo você não poder rodar nessa porta a opção seria usaro o comando --port como no exemplo abaixo.


php artisan serve --port 3000


  • Feito isso temos um sistema  de autenticação laravel padrão usando banco de dados postgres, muito facil não acham !
  • O laravel facilita muito a nossa vida no dia a dia  de desenvolvimento pois o mesmo e um framework robusto e muito poderoso quando utilizado de maneira correta.

          Agora Vamos começar a bricadeira rsrs !!!


  • Nesse passo vou mostrar como e bem facil criar um servidor de aplicação usando o laravel o que deixa essa tarefa muito facil, então vamos la.
  • Vamos criar uma Api REstFull de uma conta bancaria onde teremos duas MIGRATIONS,  uma para o banco e outra para a conta  nesse passo vamos aprender a criar uma migration e montar os relacionamentos nos modelos e criar nossas seeders e controllers.



  1. Primeiro passo vamos usar o comando do Artisan  para criar a nossa  migration de  Accounts usando o seguinte comando:

php artisan make:migration create_accounts_table

Esse comando vai criar um arquivo dentro da pasta database/migrations  que  irar  conter o nosso arquivo  create_account o arquivo estara dessa forma:




Essa e a estrutura retornada pelo nosso comando usando o artisan, para terminarmos de criar  a nossa migration vamos criar nossos atributos passando os campos da nossa tabela como no exemplo abaixo.





Agora vamos repetir o mesmo processo e criar nossa migration Banks que ficarar dessa forma:






Feito a criação das nossas migrations precisamos definir nossos modelos de relacionamento para accounts e banks  para isso vamos usar o seguinte commando para criar nossos modelos:

 OBS: "Antes de criar nossos modelos, vamos na pasta App do laravel e vamos criar uma nova pasta chamada Models isso e preciso pois por default o laravel não traz essa pasta e por fim de organização do projeto vamos criala."

Feito isso podemos continuar e executar o comando a baixo para criar nosso modelo de Account.

php artisan make:model Models/Account

O retorno desse comando ira criar um arquivo na nossa pasta recem criada chamada Models que irar trazer o arquivo dessa forma:




Após a Model de Account ser criada devemos definir os nossos metodos pois como podemos ver ela retorna uma estrutura simples sem nada ao ser criada.

Então vamos definir os nosso metodos para nosso Account que ficarão dessa forma:



Como podemos ver estamos definindo três metodos no nosso modelo o primeiro e o Table  que serve para  definimos os nomes da nossa tabela, por default o laravel trabalha com a estrutura de banco de dados em ingles  e quando precisamos definir uma tabela especifica por exemplo em portugues e importante passa esse atributo.

O fillable serve para informamos ao nosso eloquent  nosso ORM os dados que podemos salvar de uma unica vez, pense como um atributo que faz a segurança dos dados que podem ser submetidos.

E por ultimo temos uma função  de relacionamento entre nosso Model Account e nosso Model Bank.


Agora que criamos nosso modelo Account precisamos criar nosso modelo Bank então vamos lá executar o comando para criar nosso model.


php artisan make:model Models/Bank

Feito isso precisamos configurar nosso arquivo que foi criado que ficarar dessa forma:




Okay OKay  !!!

Agora temos nossas migration e models definidas o que esta faltando?


  • Precisamos criar  as nossas Controllers e Rotas


Como fazemos isso ?

A resposta e bem facil basta usar o comando do Artisan e criar a Controller, então vamos lá.

OBS. "Antes de usamors o comando para criar nossa Controller vamos na pasta App/Http/Controllers no projeto e vamos criar uma pasta chamada Api onde irar ficar nossos controlladores"

Feito isso podemos continuar e criar nossos controllers.

php artisan make:controller Api/AccountController
php artisan make:controller Api/BankController


Feito a execução desses comando e criado dois arquivos na pasta que acabamos de criar que estão dessa forma:







Aqui nesses dois controllers e onde iremos definir nossos metodos  para nossa Api.
mais antes vamos criar nossas rotas  que apontam para o nosso controller.



Para criar nossas rotas basta irmos na nossa pasta chamada routes no arquivo api.php e definimos as nossas rotas para Account e para Bank que ficarar dessa forma.





Agora voltamos ao nosso controlador onde iremos criar os metodos data nossa API que ficarão dessa forma:


ACCOUNT:




BANK:




Feito isso já temos nossos metodos funcionando via API.

Mais temos um problema com essa solução qual seria ?

Se  observarem estamos repetindo o codigo e toda vez que repetimos algo e como se o codigo
estivesse chingando e te chamando de burro.

Qual seria a melhor solução nesse caso especifico ?

Nesse caso vamos criar um arquivo chamo TRAIT  que vai fazer nosso meio de campo com o controlador que ficarar dessa forma:



TRAIT:




Esse arquivo pode ser criado dentro da pasta Controller como ApiTrait.php ou na Raiz do Projeto dentro de uma Pasta Traits, eu particulamente uso muito a segunda opção:

feito isso basta importarmos a nossa treite nos nossos controladores  e vualar temos duas chamadas diferentes usando o mesmo metodo.

Os controladores ficarão assim:

ACCOUNT:




BANK:





Como podemos ver não temos mais regras dentro do nosso controlador o que fizemos foi abstrair toda a responsabilidade da controller e manda para um arquivo chamado Trait  que tem dentro de si metodos burros  que não servem para nada a não ser que sejam instanciados como  no exemplo assima.



Agora temos uma Api pronta Ronny ? A reposta é Não

Quando estamos trabalhando com Api precisamos muito mais que apenas um crud via requisição precisamos de filtros  e relacionamentos  de uma forma dinamica na nossa API o que vamos fazer agora e melhorar nossa Trait para fazer isso.

Outra vantagem de reaproveitar o codigo so alteramos nossa treit e ambos os controles irão receber a alteração, entãi vamos meter a mão na massa e alterar a nossa TRAIT que ficarar dessa forma:


INDEX:


STORE:


SHOW:



UPDATE:


DESTROY:


RELATIONSHIPS:



Pronto com Isso temos uma Trait pronta para usamos com relacionamentos e filtro na nossa aplicação usando eloquent ORM do Laravel.

Apos ter feito isso vamos precisar definir nosso relacionamento RELATIONSHIPS no nosso controlador ACCOUNT que ficarar assim:



Pronto feito isso temos todos os nossos metodos prontos e funcionando e com nosso relacionamento de ACCOUNT COM BANK.


Terminando esses passos precisamos  popular nosso banco de dados com alguns dados para testarmos nossa aplicação para isso vamos usar as SEEDERS do laravel que gera esses dados para teste.

Para isso precisamos rodar o comando:


php artisan make:seeder  BanksTableSeeder

Esse comando vai criar um arquivo dentro da pasta database/seeds CHAMADO BanksTableSeeder.php  que sera assim:





O que precisamos fazer e passa os dados que queremos que seja populado em nosso banco de dados para isso você vai copiar e colar dentro do run() o codigo abaixo:


$data = [
        ['code'=>'654', 'title'=>'Banco A.J.Renner S.A.'],
        ['code'=>'246', 'title'=>'Banco ABC Brasil S.A.'],
        ['code'=>'25', 'title'=>'Banco Alfa S.A.'],
        ['code'=>'641', 'title'=>'Banco Alvorada S.A.'],
        ['code'=>'213', 'title'=>'Banco Arbi S.A.'],
        ['code'=>'19', 'title'=>'Banco Azteca do Brasil S.A.'],
        ['code'=>'29', 'title'=>'Banco Banerj S.A.'],
        ['code'=>'0', 'title'=>'Banco Bankpar S.A.'],
        ['code'=>'740', 'title'=>'Banco Barclays S.A.'],
        ['code'=>'107', 'title'=>'Banco BBM S.A.'],
        ['code'=>'31', 'title'=>'Banco Beg S.A.'],
        ['code'=>'739', 'title'=>'Banco BGN S.A.'],
        ['code'=>'96', 'title'=>'Banco BM&F de Serviços de Liquidação e Custódia S.A'],
        ['code'=>'318', 'title'=>'Banco BMG S.A.'],
        ['code'=>'752', 'title'=>'Banco BNP Paribas Brasil S.A.'],
        ['code'=>'248', 'title'=>'Banco Boavista Interatlântico S.A.'],
        ['code'=>'218', 'title'=>'Banco Bonsucesso S.A.'],
        ['code'=>'65', 'title'=>'Banco Bracce S.A.'],
        ['code'=>'36', 'title'=>'Banco Bradesco BBI S.A.'],
        ['code'=>'204', 'title'=>'Banco Bradesco Cartões S.A.'],
        ['code'=>'394', 'title'=>'Banco Bradesco Financiamentos S.A.'],
        ['code'=>'237', 'title'=>'Banco Bradesco S.A.'],
        ['code'=>'225', 'title'=>'Banco Brascan S.A.'],
        ['code'=>'M15', 'title'=>'Banco BRJ S.A.'],
        ['code'=>'208', 'title'=>'Banco BTG Pactual S.A.'],
        ['code'=>'44', 'title'=>'Banco BVA S.A.'],
        ['code'=>'263', 'title'=>'Banco Cacique S.A.'],
        ['code'=>'473', 'title'=>'Banco Caixa Geral - Brasil S.A.'],
        ['code'=>'412', 'title'=>'Banco Capital S.A.'],
        ['code'=>'40', 'title'=>'Banco Cargill S.A.'],
        ['code'=>'745', 'title'=>'Banco Citibank S.A.'],
        ['code'=>'M08', 'title'=>'Banco Citicard S.A.'],
        ['code'=>'241', 'title'=>'Banco Clássico S.A.'],
        ['code'=>'M19', 'title'=>'Banco CNH Capital S.A.'],
        ['code'=>'215', 'title'=>'Banco Comercial e de Investimento Sudameris S.A.'],
        ['code'=>'756', 'title'=>'Banco Cooperativo do Brasil S.A. - BANCOOB'],
        ['code'=>'748', 'title'=>'Banco Cooperativo Sicredi S.A.'],
        ['code'=>'75', 'title'=>'Banco CR2 S.A.'],
        ['code'=>'721', 'title'=>'Banco Credibel S.A.'],
        ['code'=>'222', 'title'=>'Banco Credit Agricole Brasil S.A.'],
        ['code'=>'505', 'title'=>'Banco Credit Suisse (Brasil) S.A.'],
        ['code'=>'229', 'title'=>'Banco Cruzeiro do Sul S.A.'],
        ['code'=>'266', 'title'=>'Banco Cédula S.A.'],
        ['code'=>'3', 'title'=>'Banco da Amazônia S.A.'],
        ['code'=>'083-3', 'title'=>'Banco da China Brasil S.A.'],
        ['code'=>'M21', 'title'=>'Banco Daimlerchrysler S.A.'],
        ['code'=>'707', 'title'=>'Banco Daycoval S.A.'],
        ['code'=>'300', 'title'=>'Banco de La Nacion Argentina'],
        ['code'=>'495', 'title'=>'Banco de La Provincia de Buenos Aires'],
        ['code'=>'494', 'title'=>'Banco de La Republica Oriental del Uruguay'],
        ['code'=>'M06', 'title'=>'Banco de Lage Landen Brasil S.A.'],
        ['code'=>'24', 'title'=>'Banco de Pernambuco S.A. - BANDEPE'],
        ['code'=>'456', 'title'=>'Banco de Tokyo-Mitsubishi UFJ Brasil S.A.'],
        ['code'=>'214', 'title'=>'Banco Dibens S.A.'],
        ['code'=>'1', 'title'=>'Banco do Brasil S.A.'],
        ['code'=>'47', 'title'=>'Banco do Estado de Sergipe S.A.'],
        ['code'=>'37', 'title'=>'Banco do Estado do Pará S.A.'],
        ['code'=>'39', 'title'=>'Banco do Estado do Piauí S.A. - BEP'],
        ['code'=>'41', 'title'=>'Banco do Estado do Rio Grande do Sul S.A.'],
        ['code'=>'4', 'title'=>'Banco do Nordeste do Brasil S.A.'],
        ['code'=>'265', 'title'=>'Banco Fator S.A.'],
        ['code'=>'M03', 'title'=>'Banco Fiat S.A.'],
        ['code'=>'224', 'title'=>'Banco Fibra S.A.'],
        ['code'=>'626', 'title'=>'Banco Ficsa S.A.'],
        ['code'=>'M18', 'title'=>'Banco Ford S.A.'],
        ['code'=>'233', 'title'=>'Banco GE Capital S.A.'],
        ['code'=>'734', 'title'=>'Banco Gerdau S.A.'],
        ['code'=>'M07', 'title'=>'Banco GMAC S.A.'],
        ['code'=>'612', 'title'=>'Banco Guanabara S.A.'],
        ['code'=>'M22', 'title'=>'Banco Honda S.A.'],
        ['code'=>'63', 'title'=>'Banco Ibi S.A. Banco Múltiplo'],
        ['code'=>'M11', 'title'=>'Banco IBM S.A.'],
        ['code'=>'604', 'title'=>'Banco Industrial do Brasil S.A.'],
        ['code'=>'320', 'title'=>'Banco Industrial e Comercial S.A.'],
        ['code'=>'653', 'title'=>'Banco Indusval S.A.'],
        ['code'=>'630', 'title'=>'Banco Intercap S.A.'],
        ['code'=>'077-9', 'title'=>'Banco Intermedium S.A.'],
        ['code'=>'249', 'title'=>'Banco Investcred Unibanco S.A.'],
        ['code'=>'M09', 'title'=>'Banco Itaucred Financiamentos S.A.'],
        ['code'=>'184', 'title'=>'Banco Itaú BBA S.A.'],
        ['code'=>'479', 'title'=>'Banco ItaúBank S.A'],
        ['code'=>'376', 'title'=>'Banco J. P. Morgan S.A.'],
        ['code'=>'74', 'title'=>'Banco J. Safra S.A.'],
        ['code'=>'217', 'title'=>'Banco John Deere S.A.'],
        ['code'=>'76', 'title'=>'Banco KDB S.A.'],
        ['code'=>'757', 'title'=>'Banco KEB do Brasil S.A.'],
        ['code'=>'600', 'title'=>'Banco Luso Brasileiro S.A.'],
        ['code'=>'212', 'title'=>'Banco Matone S.A.'],
        ['code'=>'M12', 'title'=>'Banco Maxinvest S.A.'],
        ['code'=>'389', 'title'=>'Banco Mercantil do Brasil S.A.'],
        ['code'=>'746', 'title'=>'Banco Modal S.A.'],
        ['code'=>'M10', 'title'=>'Banco Moneo S.A.'],
        ['code'=>'738', 'title'=>'Banco Morada S.A.'],
        ['code'=>'66', 'title'=>'Banco Morgan Stanley S.A.'],
        ['code'=>'243', 'title'=>'Banco Máxima S.A.'],
        ['code'=>'45', 'title'=>'Banco Opportunity S.A.'],
        ['code'=>'M17', 'title'=>'Banco Ourinvest S.A.'],
        ['code'=>'623', 'title'=>'Banco Panamericano S.A.'],
        ['code'=>'611', 'title'=>'Banco Paulista S.A.'],
        ['code'=>'613', 'title'=>'Banco Pecúnia S.A.'],
        ['code'=>'094-2', 'title'=>'Banco Petra S.A.'],
        ['code'=>'643', 'title'=>'Banco Pine S.A.'],
        ['code'=>'724', 'title'=>'Banco Porto Seguro S.A.'],
        ['code'=>'735', 'title'=>'Banco Pottencial S.A.'],
        ['code'=>'638', 'title'=>'Banco Prosper S.A.'],
        ['code'=>'M24', 'title'=>'Banco PSA Finance Brasil S.A.'],
        ['code'=>'747', 'title'=>'Banco Rabobank International Brasil S.A.'],
        ['code'=>'088-4', 'title'=>'Banco Randon S.A.'],
        ['code'=>'356', 'title'=>'Banco Real S.A.'],
        ['code'=>'633', 'title'=>'Banco Rendimento S.A.'],
        ['code'=>'741', 'title'=>'Banco Ribeirão Preto S.A.'],
        ['code'=>'M16', 'title'=>'Banco Rodobens S.A.'],
        ['code'=>'72', 'title'=>'Banco Rural Mais S.A.'],
        ['code'=>'453', 'title'=>'Banco Rural S.A.'],
        ['code'=>'422', 'title'=>'Banco Safra S.A.'],
        ['code'=>'33', 'title'=>'Banco Santander (Brasil) S.A.'],
        ['code'=>'250', 'title'=>'Banco Schahin S.A.'],
        ['code'=>'743', 'title'=>'Banco Semear S.A.'],
        ['code'=>'749', 'title'=>'Banco Simples S.A.'],
        ['code'=>'366', 'title'=>'Banco Société Générale Brasil S.A.'],
        ['code'=>'637', 'title'=>'Banco Sofisa S.A.'],
        ['code'=>'12', 'title'=>'Banco Standard de Investimentos S.A.'],
        ['code'=>'464', 'title'=>'Banco Sumitomo Mitsui Brasileiro S.A.'],
        ['code'=>'082-5', 'title'=>'Banco Topázio S.A.'],
        ['code'=>'M20', 'title'=>'Banco Toyota do Brasil S.A.'],
        ['code'=>'M13', 'title'=>'Banco Tricury S.A.'],
        ['code'=>'634', 'title'=>'Banco Triângulo S.A.'],
        ['code'=>'M14', 'title'=>'Banco Volkswagen S.A.'],
        ['code'=>'M23', 'title'=>'Banco Volvo (Brasil) S.A.'],
        ['code'=>'655', 'title'=>'Banco Votorantim S.A.'],
        ['code'=>'610', 'title'=>'Banco VR S.A.'],
        ['code'=>'370', 'title'=>'Banco WestLB do Brasil S.A.'],
        ['code'=>'21', 'title'=>'BANESTES S.A. Banco do Estado do Espírito Santo'],
        ['code'=>'719', 'title'=>'Banif-Banco Internacional do Funchal (Brasil)S.A.'],
        ['code'=>'755', 'title'=>'Bank of America Merrill Lynch Banco Múltiplo S.A.'],
        ['code'=>'744', 'title'=>'BankBoston N.A.'],
        ['code'=>'73', 'title'=>'BB Banco Popular do Brasil S.A.'],
        ['code'=>'78', 'title'=>'BES Investimento do Brasil S.A.-Banco de Investimento'],
        ['code'=>'69', 'title'=>'BPN Brasil Banco Múltiplo S.A.'],
        ['code'=>'70', 'title'=>'BRB - Banco de Brasília S.A.'],
        ['code'=>'092-2', 'title'=>'Brickell S.A. Crédito, financiamento e Investimento'],
        ['code'=>'104', 'title'=>'Caixa Econômica Federal'],
        ['code'=>'477', 'title'=>'Citibank N.A.'],
        ['code'=>'081-7', 'title'=>'Concórdia Banco S.A.'],
        ['code'=>'097-3', 'title'=>'Cooperativa Central de Crédito Noroeste Brasileiro Ltda.'],
        ['code'=>'085-x', 'title'=>'Cooperativa Central de Crédito Urbano-CECRED'],
        ['code'=>'099-x', 'title'=>'Cooperativa Central de Economia e Credito Mutuo das Unicreds'],
        ['code'=>'090-2', 'title'=>'Cooperativa Central de Economia e Crédito Mutuo das Unicreds'],
        ['code'=>'089-2', 'title'=>'Cooperativa de Crédito Rural da Região de Mogiana'],
        ['code'=>'087-6', 'title'=>'Cooperativa Unicred Central Santa Catarina'],
        ['code'=>'098-1', 'title'=>'Credicorol Cooperativa de Crédito Rural'],
        ['code'=>'487', 'title'=>'Deutsche Bank S.A. - Banco Alemão'],
        ['code'=>'751', 'title'=>'Dresdner Bank Brasil S.A. - Banco Múltiplo'],
        ['code'=>'64', 'title'=>'Goldman Sachs do Brasil Banco Múltiplo S.A.'],
        ['code'=>'62', 'title'=>'Hipercard Banco Múltiplo S.A.'],
        ['code'=>'399', 'title'=>'HSBC Bank Brasil S.A. - Banco Múltiplo'],
        ['code'=>'168', 'title'=>'HSBC Finance (Brasil) S.A. - Banco Múltiplo'],
        ['code'=>'492', 'title'=>'ING Bank N.V.'],
        ['code'=>'652', 'title'=>'Itaú Unibanco Holding S.A.'],
        ['code'=>'341', 'title'=>'Itaú Unibanco S.A.'],
        ['code'=>'79', 'title'=>'JBS Banco S.A.'],
        ['code'=>'488', 'title'=>'JPMorgan Chase Bank'],
        ['code'=>'14', 'title'=>'Natixis Brasil S.A. Banco Múltiplo'],
        ['code'=>'753', 'title'=>'NBC Bank Brasil S.A. - Banco Múltiplo'],
        ['code'=>'086-8', 'title'=>'OBOE Crédito Financiamento e Investimento S.A.'],
        ['code'=>'254', 'title'=>'Paraná Banco S.A.'],
        ['code'=>'409', 'title'=>'UNIBANCO - União de Bancos Brasileiros S.A.'],
        ['code'=>'230', 'title'=>'Unicard Banco Múltiplo S.A.'],
        ['code'=>'091-4', 'title'=>'Unicred Central do Rio Grande do Sul'],
        ['code'=>'84', 'title'=>'Unicred Norte do Paraná'],
      ];

      DB::table('banks')->insert($data);


Apos copiar e colar o codigo dentro do RUN(), vamos no arquivo DatabaseSeeder.php e adicionaremos dentro do run() a seguinte linha

$this->call(BankTableSeeder::class);


Feito isso podemos rodar nossa seeder para popular nosso banco de dados e testar.
para rodar as seeders podemos usar o seguinte comando:


php artisan migrate:refresh --seed

Feito isso temos nosso banco de dados populado  e nossa API pronta para testes:



Ainda podemos melhorar nosso codigo Ronny ? A reposta e Sim  podemos implementar o Design Pattern em nosso Codigo. Ou seja vamos criar camadas e dividir resposabilidades sem falar que podemos enxugar ainda mais nosso codigo.

Para fazer isso vamos usar um cara chamado Repository no nosso caso o pacote l5Repository.

Vamos começar instalando o pacote em nosso laravel para isso vamos na pasta Config na raiz do projeto no arquivo App.php e vamos colocar mais um provider que ficara assim:


'providers' => [
    ...
    Prettus\Repository\Providers\RepositoryServiceProvider::class,
],

Feito isso podemos rodar nosso composer para instalar o pacote:

composer require prettus/l5-repository

Agora que temos nosso pacote instalado precisamos configuralo, para isso precisamos de mais um arquivo dentro do config/ app.php, o nosso RepositoryServiceProvider onde vamos registrar nossas rotas.

'providers' => [
    ...
    App\Providers\RepositoryServiceProvider::class,
],


Feito isso vamos  em app/Providers e vamos criar o arquivo RepositoryServiceProvider.php
que vai ficar assim:





Como podemos ver Registramos nossas repositorys mais ainda falta criar as mesmas
então vamos criar uma pasta dentro de app chamada Repositories e dentro dessa pasta vamos ter quatro arquivos referentes aos nossos modelos que são:



  • AccountRepository
  • AccountRepositoryEloquent
  • BankRepository
  • BankRepositoryEloquent

Os arquivos vão ficar dessa forma:

AccountRepository:




AccountRepositoryEloquent:




BankRepository:




BankRepositoryEloquent:




Feito isso já temos nosso repossitory fazendo o meio de campo entre o modelo e o controller
ele sera responsavel pela criação de nossos metodos de relacionamento.

Antes de finalizar precisamos importa o repository para os nossos modelos para que o mesmo possa de comunicar como nossa camada que criamos.

Nesse caso nossos modelos ficarão assim aparti de agora:


Account:





Bank:




Agora sim temos nosso repository instalado e funcionado.

Ai você me pergunta estamos so criando mais codigo Ronny ? A resposta e não
estamos emcapisulando nosso codigo e dividindo as responsabilidades.

O que vamos fazer agora para finalizar nossa Api e mudar nossa Trai de uma chamada usando Eloquent Laravel para uma chamada usando o nosso Repository que vai ficar assim:




Da para perceber o quanto o nosso codigo ficou enchuto comparado ao mesmo arquivo usando so eloquent não acham.

Agora precisamos so mudar a chamada de nossos controllers para entender o Repository ambos vão ficar dessa forma:

AccountController:





BankController:




Okay okay feito isso temos agora nossa Api pronta usando Repository padrão  Design Pattern.


Por fim uma observação quando trabalhando com Api Precisamos usar com cara chamado CORS para podemos acessar nossa aplicação em servidores diferentes, pequisem sobre como instalar o mesmo no Laravel para corrigir o erro que gera ao tentar acessar de um servidor diferente.

Espero poder ter ajudado um pouco com meu conhecimento ! boa sorte a todos.


GITLAB:
https://gitlab.com/Development_Public/API_RESTful_Laravel.git



Esse if serve para apontar  nossa pasta public para public_html em servidores compartilhados.

/** * Condição para servidores de hospedagem * que usa apasta public_html como default */if(env('APP_ENV') === 'production')
{
    $this->app->bind('path.public', function()
    {
        return realpath(base_path().'/../public_html');    });}


Comments

  1. This comment has been removed by the author.

    ReplyDelete
  2. Boa tarde amigo, aqui é o Pedro estive com o coordenador e professor do curso de TADS, a dúvida seria a seguinte fazer um app , e se tenho que usar o linux, pois eu estava no xampp no windows, e gostaria se saber se usando o virtual box versão 6 se não me engano,ele poderá manipular o linux no sistema operacional Windos, e apartir do Windows 7 64 bits eu poderia usar o laravel , por exemplo versão 5.5 , ou outras , mas que eu possa usar dentro do windows usando comandos 'Linux'? Se posso usar windows ,mas usando o linux no virtual machine? Essa seria a dúvida principal,daí , o resto vou procurando para fazer usando um ip como você havia mencionado para subir a aplicação mobile, eu creio que der com API REST ou RESTFULL né isso? Obrigado, boa tarde vou procurar aqui. Tô me perdidão mesmo, complicado,obrigado!

    ReplyDelete
  3. Valuable post useful for everyone.Keep on sharing.
    Full Stack Training

    ReplyDelete
  4. Thanks for writing this informative post. Looking forward to read more.
    Laravel Web Development Services India

    ReplyDelete
  5. Amazing blog. I have never seen a blog like this
    Laravel Devlopment company

    ReplyDelete
  6. Hello,
    Thanks for writing this informative blog.
    Laravel is primarily used for building custom web apps using PHP. It is the top choice for developers and clients when it comes to web apps development.
    If you are looking for a Laravel Development Company Hire Laravel Expert from Dark Bears.
    For more visit.

    ReplyDelete
  7. As a leading Top Mobile App Development Company, Appsinvo company is well known to design and build customized web and mobile app solutions for the clients. Complete integration of the mobile app and the website gives the businesses a boost not only in their growth but also in the revenue.
    Full Stack Developers in Delhi
    Top Mobile App Development Company in Qatar

    ReplyDelete

Post a Comment

Popular posts from this blog

Vue.Js Exemple

Export to Excel Laravel 5.1

Instalando o NodeJS