Я читал много о REST api в статьях php. но я все равно запутаюсь.
они в основном переписывают URL-адрес index.php, который обрабатывает URL-адрес и зависит от метода, затем посылает ответ
но который является правильным способом обработки URL-адреса? это выглядит неправдой …
если URL-адрес запроса похож на GET www.domain.com/user/1
он будет называть getUser($id);
но что произойдет, если вы также можете получить пользователя по имени или, возможно, по электронной почте? поэтому URL-адрес также может быть www.domain.com/user/john
или www.domain.com/user/john@gmail.com
и каждый url должен вызывать различные методы, такие как getUsrByName($name)
или getUsrByEmail($mail)
Правильный способ обращения с этим был бы иметь такие URL-адреса:
domain.com/user/id/1 -> user::getById domain.com/user/email/foo@bar.com -> 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
Это то, что использует переполнение стека:
stackoverflow.com/questions/tagged/php stackoverflow.com/tags/php/new stackoverflow.com/questions/tagged/mysql?sort=featured
Чтобы избежать длинного оператора if / else, используйте имена переменных. это позволяет использовать строку url для вызова правильной функции.
http://php.net/manual/en/functions.variable-functions.php
Кроме того, вы можете использовать методы класса / класса вместо функций. таким образом вы можете настроить функцию __autoload, которая позволит вам загружать только код, который вы собираетесь использовать при каждом вызове index.php.
Архитектура MVC обычно разбивает свои URL-адреса на / class_name / class_method_name / arguments …