knowledge_quest knowledge_quest - 19 days ago 12
PHP Question

nginx configuration for a RESTful API

I am a beginner with nginx and php, so please excuse my basic question.

For a RESTful based API (nginx + php) I would need some help with nginx configuration.

Here is the relevant snippet of the nginx configuration (as suggested here) for redirecting all /api/v1/* requests to my apiv1.php script:

server {
server_name myServer;
root /usr/share/nginx/html;
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}


Now the issue is that when I type http://myServer//api/v1/resource/GetInfo in my browser, the apiv1.php script doesn't seem to receive the "resource/GetInfo". Actually, _GET and _REQUEST are empty, but _SERVER looks OK!

In my /etc/php5/fpm/php.ini, the following relevant config is enabled:

request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.


Do you maybe know why the php _GET and _REQUEST are empty? Is this related to my php configuration only?

Best regards,
M.

Answer

Replace this:

location /api/v1/ {
    try_files $uri $uri/ /apiv1.php?$args;
}

With the following inside your server block:

rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;

Create a php file called apiv1.php and place in the root directory of your web server with the following lines of code:

<?php
$class  = filter_input(INPUT_GET, 'class',  FILTER_SANITIZE_STRING);
$method = filter_input(INPUT_GET, 'method', FILTER_SANITIZE_STRING);

echo $class;
echo '<br />';
echo $method;

Test by visiting the following link in your browser:

http://myServer/api/v1/members/getInfo
Comments