DEV Community

Marcelo Barreto Nees
Marcelo Barreto Nees

Posted on

Adianti - Nginx rewrite rules

No tutorial de "Serviços RESTful no Adianti Framework 7 ", especificamente no item "Configurando as rotas" podemos encontrar as configurações que devem ser aplicadas no servidor Apache.

#RESTFUL routes
RewriteRule ^contacts/([A-Za-z0-9]*)$ rest.php?class=ContactRestService&method=handle&id=$1&%{QUERY_STRING} [NC]
RewriteRule ^contacts/([A-Za-z-_0-9]*)/([A-Za-z-_0-9]*)$ rest.php?class=ContactRestService&method=$2&id=$1&%{QUERY_STRING} [NC]
RewriteRule ^contacts$ rest.php?class=ContactRestService&method=handle&%{QUERY_STRING} [NC]
Enter fullscreen mode Exit fullscreen mode

Com a regra acima, podemos fazer chamadas como http://localhost/sistema/contacts/1 ao invés de http://localhost/sistema/rest.php?class=ContactRestService&method=handle&id=1.

Muito legal, não é mesmo?

Sim, é legal, mas perceba que para cada serviço Rest do seu sistema você terá que repetir essas regras.

Mas, como fazer se nosso webserver for o Nginx?

Edite o arquivo de configuração do seu domínio hospedado no nginx e procure pelo bloco location.

Ex:

location / {

    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;

    #
    # Adianti REST services
    #
    rewrite ^/auth$                          /rest.php?class=ApplicationAuthenticationRestService&method=getToken last; # Autenticar usando método POST (Recomendável)
    rewrite ^/api/([\w]+)/([\w]+)$           /rest.php?class=$1RestService&method=handle&id=$2&$args              last;
    rewrite ^/api/([\w]+)/([\w]+)/([\w]+)$   /rest.php?class=$1RestService&method=$3&id=$2&$args                  last;
    rewrite ^/api/([\w]+)$                   /rest.php?class=$1RestService&method=handle&$args                    last;
  }

Enter fullscreen mode Exit fullscreen mode

Verifique se está tudo configurado corretamente e reinicie ser servidor nginx.

Agora a grande sacada é o fato de utilizarmos expressões regulares para identificar o nome do serviço Rest.

Ex:

Se você tiver um Modelo chamado Contact, basta criar o arquivo rest com o nome ContactRestService.php e o serviço já estará funcionando.

Se tiver outro model chamado Product, crie o arquivo rest com o nome ProductRestService.php.

Prático, não?

Top comments (0)