2011-01-11 3 views
1

Я прочитал много о REST api в статьях php. но я все равно запутаюсь.как обрабатывать php ресурсы ресурсов REST

они в основном переписать URL к index.php, который обрабатывать URL и зависит от метода, а затем отправить ответ

но который является надлежащим образом обработать URL? это выглядит doen't выглядеть правильно ...

  1. получить Ури и разделить его
  2. я должен знать, что делать с каждой частью, например. для GET/usr/1 Я должен сделать что-то вроде:
    if ($ myUri [0] == "usr")
    getUser ($ myUri [1]);

если запрос URL, как GET www.domain.com/user/1 было бы назвать getUser($id); , но что произойдет, если вы также можете получить пользователя по имени, или, может быть, по электронной почте? так что URL может быть также www.domain.com/user/john или www.domain.com/user/[email protected] и каждый URL должен вызывать различные методы, как getUsrByName($name) или getUsrByEmail($mail)

ответ

3

правильный способ обработки этого будет иметь URL, как это:

domain.com/user/id/1    -> user::getById 
domain.com/user/email/[email protected] -> user::getByEmail 
domain.com/user/username/foo  -> user::getByUsername 

Однако указание множественным «параметры» больше похожи на поиск, я бы против использования ресурсов для этого, потому что путь должен быть абсолютным. Что означает:

domain.com/user/name/Kossel/likes/StackOverflow 

И:

domain.com/user/likes/StackOverflow/name/Kossel 

ли не тот же ресурс. Вместо этого я хотел бы сделать:

domain.com/user/?name=Kossel&likes=StackOverflow 

Это то, что использует Stack Overflow:

stackoverflow.com/questions/tagged/php 
stackoverflow.com/tags/php/new 
stackoverflow.com/questions/tagged/mysql?sort=featured 
+0

и что о должным образом обработать Ури? как переполнение стека фактически обрабатывает uri/questions/tagged/mysql? sort = featured? – Kossel

+0

Ну, я не знаю о SO исходный код много, но я бы сделал это à-la-MVC: 'questions' - это контроллер, tagged - действие, php - параметр запроса (например, ID) , а '? sort = featured' также является параметром запроса (фильтр). Итак, скажем, у вас есть файл 'questions.php', то есть файл с выражением класса или' switch', содержащий случай для «tagged». Последний ресурс ('php') - это параметр' id', а все остальные в '$ _GET' - их соответствующие параметры. – netcoder

0

Чтобы избежать долго, если/другое заявление, использовать имена переменных функций. это позволяет использовать строку url для вызова правильной функции.

http://php.net/manual/en/functions.variable-functions.php

Кроме того, вы можете использовать классы/методы класса вместо функций. таким образом вы можете настроить функцию __autoload, которая позволит вам загружать только код, который вы собираетесь использовать при каждом вызове index.php.

MVC архитектура обычно разбивает свои адреса в/class_name/class_method_name/аргументы ...

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