2015-10-24 3 views
0

При создании api каждый допустимый URI сопоставляется с действием. Это действие может быть конкретным вызовом функции или может установить некоторые параметры, переданные общей функции.Эффективная карта RESTful URI для архитектуры конечных точек API

Мой вопрос в том, как и каков хороший метод для сопоставления uri, такого как /auth/create, с правильным действием.

Чтобы проиллюстрировать мои попытки:

Я думал об именовании функции такие же, как в URI замена / с Z непосредственно вызывать функцию по имени. Я мог бы просто просто выполнить запрос $ request_uri без тестирования.

// from $request_uri = '/auth/create' I make; 
$request_uri ='ZauthZcreate'; 

function ZauthZcreate($email, $password) { 
    echo "i've been called as expected \n"; 
} 
$request_uri($_GET[email],$_GET[password]); 

но это не сработает с чем-то вроде /user/123123. Я стараюсь избегать попадания в бесконечный каскад if-else.

EDIT

я итерация на этой концепции и нашел другое решение:

$request_uri = '/api/auth/login'; 
$request_path = ltrim($request_uri,'/'); 
$request  = explode('/', $request_path); 

// begin point for api 
if($method = array_shift($request)) { 
    if ($method == 'api') { 
    $method($request); 
    } 
} 

function api($request) { 
    $method = __FUNCTION__.'_'.array_shift($request); 
    if(is_callable($method)) { 
    $method($request); 
    } 
} 

// In a dedicated file for the scope auth 

function api_auth($request) { 
    $method = __FUNCTION__.'_'.array_shift($request); 
    if(is_callable($method)) { 
    $method($request); 
    } 
} 

function api_auth_login($request) { 
    // api end point implementation here 
} 
function api_auth_create($request) { 
    // api end point implementation here 
} 

ответ

0

Я бы не использовать тот Заболоцкий, что это будет напрасно трудно читать. В приведенном выше примере вы можете сделать то же самое с помощью только AuthCreate. Вы также можете сделать это с помощью OO-дизайна, создав базовый класс для ваших основных глаголов (например, Auth), а затем объявив их функции-члены.

В конечном итоге вы не захотите разрешить это с помощью блоков if/else, а скорее проанализируйте каждую часть URI и посмотрите, существует ли функция в правильном пространстве имен, и как только она не начнет использовать ваши косые черты в качестве входов (для вашего примера выше с/user/123123).

Это может также сделать вам хорошо посмотреть, как другие REST API структурированы, потому что это что-то из решаемой задачи

+0

если вы нашли ссылку из другой остальной структуры апи, не стесняйтесь. У меня проблемы с поиском. –

+0

http://stackoverflow.com/questions/4973156/how-to-write-a-rest-api – DaOgre

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