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?

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay