2016-10-31 3 views
1

Я создаю API для подачи некоторых приложений.Как переписать правила NginX в этом примере?

Таким образом, приложение может вызывать эти возможные URL-адреса для получения информации из базы данных;

mysite.com/api/v1/get/menus/list_tblname1.json.php 
mysite.com/api/v1/get/menus/list_tblname1.json.php?type=arr 
mysite.com/api/v1/get/menus/list_tblname2.json.php 
mysite.com/api/v1/get/menus/list_tblname2.json.php?type=arr 

В PHP У меня есть уже код, который захватывает tblname из URL и дать мне обратно все содержимое таблицы. Он работает хорошо (это не окончательная версия). Но теперь я нахожу себя копированием и вставкой того же кода для каждой страницы, на которую указывает URL. Вот код:

<?php 
header('Content-Type:application/json'); 
include_once '../../../../class/db.php'; 
$verb=$_SERVER['REQUEST_METHOD']; 

$filePath=$_SERVER['SCRIPT_NAME']; 
$split1 = explode("/", $filePath); 

preg_match("/(?<=_)[^.]+/", $split1[5], $matches); 
$tableName = $matches[0]; 

if ($verb=="GET") { 

     header("HTTP/1.1 200 ok"); 

     if(isset($_GET['type']) && $_GET['type']=="arr"){ 
      echo db::get_list($tableName,'arr');//Reply ARRAY 
     } 
     else{ 
      echo db::get_list($tableName);//Reply JSON 
     } 
} 
else{ 
     die("Nothing for you at this page!");   
    } 

Я имею в виду, что у меня одинаковый код внутри каждой из этих страниц.

list_tblname1.json.php 
list_tblname2.json.php 

Я не знаю, как решить эту ситуацию, но я думаю, что это дело для правила перезаписи.

Так что, я думаю, что возможно решение создать одну страницу, которая может вызывать returncontent.php, например, и создать правила на сервере, который должен указывать на той же странице, когда certanlly запросе страницы и передать параметр $tableName на страницу. Я думаю, что я должен передать регулярное выражение на свой сервер и захватить $tableName с $ _GET [] (я думаю) внутри returncontent.php.

Я не уверен в этом.

Я использую NginX.

Как реализовать его в этом сценарии?

ответ

0

Как правило, это неправильная практика для анализа URI в NginX и передачи результата вниз по течению.

Вместо: mysite.com/api/v1/get/menus/returncontent.php?file=list_tblname2.json

Нет изменений Nginx нужен. Разберите параметр запроса (file) в PHP.

+0

Как в стороне, вы можете рассмотреть ORM, например. propelorm.org – rmharrison

+0

Ваша идея была приятной и чистой. Сохраните массу кода! – zwitterion

+0

, кстати, я сделал 'mysite.com/api/v1/get/menus/returncontent.php? Tbl = tblname.type'. Это может быть '? Tbl = tblname.json' или'? Tbl = tblname.arr'. – zwitterion

Смежные вопросы