Passo 1: Definindo Grupos de Rotas
Embora OPCIONAL, para manter o código organizado, agrupamos as rotas que compartilham um caminho base (prefix) ou uma regra de autenticação (middleware). Veja um exemplo:
prefix: Define um “caminho base” para todas as rotas do grupo. Se o prefixo é/apie a rota é/users, o endereço final seráhttp://seu-dominio.com/api/users.middleware: É uma camada de verificação que executa antes da sua rota, usada geralmente para autenticação. Será explicado mais adiante. Por enquanto, não vamos usar.
Observação: novamente, criar grupos de rotas é OPCIONAL. A rota pode estar avulsa, sem grupo.
Aninhando Grupos de Rotas
É possível aninharRouter::group() para organizar suas rotas de forma ainda mais granular. Os prefixos e middlewares são combinados de fora para dentro, criando uma estrutura hierárquica.
/api/vendas/pedidos e /api/estoque/produtos, ambos protegidos pelo middleware ApiAuth.
Passo 2: A Classe Router e os Métodos HTTP
A classe Router é a responsável por registrar todos os endereços (endpoints) da nossa API, associando cada um a uma ação específica em um Controller ou Service.
Ela oferece métodos para as principais requisições HTTP, permitindo-nos criar APIs RESTful de maneira semântica. A estrutura é a mesma para todos:
Router::get(): captura requisições HTTP do tipo GET, para consultar dados.- Ex.:
Router::get('/caminho', 'SuaController::metodo');
- Ex.:
Router::post(): captura requisições HTTP do tipo POST, para criar uma nova entrada.- Ex.:
Router::post('/caminho', 'SuaController::metodo');
- Ex.:
Router::put(): captura requisições HTTP do tipo PUT, para atualizar uma entrada. O cliente deve enviar todos os dados da entrada, mesmo os que não mudaram.- Ex.:
Router::put('/caminho/{id}', 'SuaController::metodo');
- Ex.:
Router::patch(): captura requisições HTTP do tipo PATCH, para atualizar parcialmente uma entrada. Ideal para quando se quer alterar apenas um ou dois campos, como o status de um pedido.- Ex.:
Router::patch('/caminho/{id}', 'SuaController::metodo');
- Ex.:
Router::delete(): captura requisições HTTP do tipo DELETE, para remover uma entrada.- Ex.:
Router::delete('/caminho/{id}', 'SuaController::metodo');
- Ex.:
PUT, PATCH e DELETE, espera-se um parâmetro {id} na URL. Isto ocorre pois, tipicamente, operações dessas naturezas requerem um identificador (do registro que será atualizado ou removido). Neste exemplo, o método de nossa controller espera um parâmetro id, então, o que o usuário inserir naquele ponto do caminho será o valor desse parâmetro. Ex.: https://seu-dominio.com/caminho/15.
Como Obter as Rotas Registradas?
Além dos métodos HTTP básicos, a classeRouter oferece métodos auxiliares que podem ser úteis em situações específicas. Um exemplo é Router::getRoutes(), que retorna um array com todas as rotas registradas no sistema. Este método é público e pode ser usado pelos desenvolvedores para fazer debug de rotas, criar dashboards ou painéis de controle.
Como Criar Novos Prefixos de Rotas?
Por motivos de segurança, todas as rotas são bloqueadas por padrão — a única exceção sendo a rota/api, que permite criar endpoints como /api/usuarios, /api/produtos, etc.
Caso deseje criar um novo prefixo de rota, siga os passos abaixo:
- Acesse o arquivo
.htaccess. Lá está a configuração que possibilita a criação de rotas com prefixo/api:RewriteRule ^api/(.*)$ MadRestServer.php [L,QSA]; - Adicione uma nova regra para o prefixo desejado:
RewriteRule ^seu-prefixo/(.*)$ MadRestServer.php [L,QSA].
Router::get('/swag', 'SwaggerController::show');.
Passo 3: Criando o Controller
Como visto anteriormente, uma rota redireciona para um controller ou service. Para este exemplo, vamos criar uma classe controladora (sempre emapp/controller/) com a seguinte estrutura:
Observação: caso se trate de uma service, certifique-se de que ela esteja em app/service/.
Agora, vamos criar uma propriedade e alguns métodos:
Observação: Request é uma classe que permite obter dados da requisição HTTP. Ao enviá-la para um método, é possível obter parâmetros enviados na URL. A classe será explicada em maior detalhe mais à frente.
Passo 4: Registrando as Rotas no Router
Com o controller pronto, o passo final é ligar os métodos dele aos endereços HTTP. Volte ao arquivo app/routes/api.php e adicione as rotas para o seu recurso:
Passo 5: Testando as Rotas
Uma boa forma de testar as rotas é através do Postman API, uma plataforma que nos permite enviar requisições HTTP para endpoints e visualizar as respostas, sendo possível, inclusive, definir variáveis de ambiente. No nosso caso, haverá a variávelbase_url que representa o caminho http://localhost/teste, onde a aplicação está sendo executada.
Para mais informações sobre como executar localmente suas aplicações geradas pelo MadBuilder, acesse: Preparando um servidor para rodar o seu Sistema Para aprender como definir variáveis dentro do Postman API, acesse: https://learning.postman.com/docs/sending-requests/variables/variables-intro/.Para este exemplo, foi criada uma rota para o endpoint
/api/hello. Veja abaixo a requisição HTTP GET:
/api/hello-to, veja abaixo a requisição HTTP POST (realizada enviando o parâmetro user com o nome Mandy):