PHP REST API с вложенными маршрутами - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу создать чистый PHP REST API , и я довольно новичок в области серверной разработки, но я опытный разработчик программного обеспечения, поэтому некоторые концепции мне известны.

Однакопосле просмотра нескольких руководств по созданию REST API с помощью PHP все инструкторы использовали более простые примеры, в которых не было вложений.

Простой пример:

GET /api/category/read.php

Однако я хочу создать что-то вроде этого:

GET /api/{user_id}/{folder_id}/{file_name}/read.php

Iя изо всех сил пытаюсь найти любой учебник, охватывающий это с PHP.И я потратил несколько часов, пытаясь понять это самостоятельно, пытаясь изменить код, который я видел в видео Tutorial.Я имею в виду, что если я сделаю так, как они, это будет означать создание папок вручную в моей папке проекта для каждой {user_id} и т. Д. Для каждой подпапки ... но я не думаю, что такое жесткое кодирование является решением.

Я нашел здесь несколько ТАК вопросов, тесно связанных с моим вопросом, но ни на один из них нет удовлетворительных ответов - я удивляюсь, что это возможно, если это вообще возможно сделать.Но это кажется настолько распространенным (например, я знаю, что GitHub API имеет именно эту поддержку /{user}/repos), поэтому я думаю, что это должно быть выполнимо.

Я был бы очень признателен, если бы кто-то мог помочь мне, как выполнитьмоя цель.Если нет, то указание на учебник / документацию, которая делает это, равнозначно приветствуется!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Создайте скрипт PHP, который получает каждый запрос (пусть Apache направляет на него все запросы), а затем обрабатывает переменную $_SERVER['REQUEST_URI'], чтобы разбить путь на сегменты, сохраняя части в переменных по вашему выбору.Затем при необходимости отправьте запрос в подкомпоненты.

0 голосов
/ 28 сентября 2018

Вам не нужно создавать структуру папок для достижения этой цели.Было бы более выгодно использовать что-то вроде Apache Mod Rewrite или фреймворк типа Laravel , чтобы избежать необходимости создавать структуру файла, которую вы описываете, и иметь единую конечную точку для обработки определенныхмаршруты:

Использование перезаписи мода с Apache2 будет работать примерно так:

.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^api/(.+)/(.+)/(.+)/read /api/read.php?user_id=$1&folder_id=$2&file_name=$3

Это предоставит переменные URI в супергобалах $ _GET и $ _REQUEST в/api/read.php


Используя инфраструктуру Laravel, вы можете использовать их подход MVC и создавать динамические маршруты , которые могут захватывать переменные URL-адреса и доставлять их в желаемую конечную точку контроллера:

в вашем файле маршрутов:

Route::get('api/{user_id}/{folder_id}/{file_name}/read', Controller@read)

в контроллере:

public function read(user_id,folder_id,file_name){ /* do stuff */ }

Есть еще много информации о специфике MVC и использовании Laravel для созданияAPI, однако, они имеют отличную документацию и учебные пособия .

...