Должны ли URL REST API выглядеть следующим образом? - PullRequest
14 голосов
/ 30 октября 2010

Правда ли, что для реализации RESTful API нужно реализовать структуру URL, которая выглядит следующим образом

http://example.com/post/
http://example.com/post/123

, где /123 будет использоваться для редактирования, удалить

Еще один способ задать вопрос: может ли URL, похожий на этот, называться RESTful?

http://example.com/script.php?method=get_title&blogid=123

Ответы [ 7 ]

14 голосов
/ 30 октября 2010

У вас нет для такой структуры URI.Это также может быть /some_obscure_string/base64_encoded_title/unique_id.Это также может быть RESTful, в зависимости от нескольких других факторов.

Но есть несколько рекомендаций по разработке URI в веб-приложении RESTful, и одним из них является простота и удобство чтения.1006 *

Ваш пример http://example.com/script.php?method=get_title&blogid=123 также может быть RESTful, но параметры запроса указывают, что вместо него используется какой-то тип RPC- или RMI-over-HTTP.слишком много думал о дизайне URI.Это автоматически придет с хорошим и правильным RESTful дизайном вашего приложения.

7 голосов
/ 30 октября 2010

Идея, лежащая в основе REST, заключается в том, что у каждого ресурса есть свой собственный URL, и вы используете различные методы HTTP для взаимодействия с этими ресурсами.Имеет смысл определить структуру URL-адреса так, чтобы иерархия между различными ресурсами отражалась в URL-адресе, но это не обязательно.

Если у вас есть такие URL-адреса

 /all-posts/
 /first-post
 /some-stuff/second-post
 /third-post

Вы все еще можете предоставить RESTful API для этого.Идея состоит в том, что от GET до /all-posts/ возвращает список URL-адресов каждого почтового объекта, и клиент использует эти URL-адреса для взаимодействия с ресурсами.В основном, URL-адреса должны рассматриваться клиентом как непрозрачные данные.

Пока встроенный в клиент URL-адрес не изменяется, вы также можете изменить структуру, не меняя клиента.

Ваш пример URL, вероятно, не принадлежит RESTful API, поскольку он содержит метод get_title.В REST URL представляет вещь .Что должно быть сделано с вещью (если она будет изменена, если ее содержимое будет извлечено, ...) не является частью URL, для этого REST использует различные методы HTTP.

5 голосов
/ 30 октября 2010

Ключевым аспектом REST является то, что URL является ресурсом.URI, подобный

http://example.com/script.php?etc-etc-etc

, не помещает идентификатор ресурса в часть ресурса URI.Нельзя сказать, что RESTful API никогда не должен использовать параметры get;на самом деле это просто прекрасно:

http://example.com/posts?sort=date_asc&offset=20&limit=10

может быть отличным способом получить URI 3-й страницы самых старых постов.Однако использование параметров get таким способом должно использоваться только в запросах, где метод также GET.PUT и особенно POST методы должны действительно использовать простые URI с ресурсом, который будет затронут только в части пути.

3 голосов
/ 22 октября 2013

Дизайн RESTful URI полностью связан с доступом к ресурсам, и они должны быть структурированы в режиме RESTful, поэтому у вас не должно быть строк запроса.

например, GET

авторы /

авторов / 1

авторов / 1 / книг

авторов / 1 / книг / 10

авторов / 1 / книг / 10 / резюме

и т. д.

В наши дни все и вся называется RESTfull, просто посмотрите на некоторые ответы его изобретателя доктора Роя Филдинга, и вы получите некоторые идеи.Стоит немного почитать эту тему.

PS Вам не нужно отправлять, получать и т. Д. В ваших URI, в настоящее время протокол HTTP в основном используется для использования API-интерфейсов REST, и вы можете передавать глагол как частьвызов.Также существует концепция согласования контента, т.е. вы можете запросить любой доступный формат из REST API (json, xml atc).

1 голос
/ 30 октября 2010

Концепция REST действительно основана на том факте, что она основана на URL, а не на больших блоках данных. При использовании REST вам не нужно передавать гигантский запрос мыла для вызова метода - ваш вызов метода / создание объекта / все, что вы хотите сделать, вызывается просто URL-адресом и глаголом, который вы использовали против этого URL.

1 голос
/ 30 октября 2010
0 голосов
/ 30 октября 2010

Структура ваших URL не имеет значения. Важно то, что каждый URL идентифицирует ровно 1 ресурс. Каждый ресурс может иметь несколько URL-адресов, которые указывают на него, но каждый URL-адрес должен указывать только на 1 ресурс.

...