Лучшие практики при использовании URIs как значение параметра в вызовах REST

Я разрабатываю API REST, где некоторые ресурсы могут быть параметрами запроса, в которые проникают. В некоторых случаях эти значения фильтра были бы ресурсами от того же API REST. Это делает для длинноватого и довольно нечитабельного URIs. В то время как это не слишком много проблемы сам по себе, потому что URIs предназначены, чтобы создаваться и управляться программно, оно делает для некоторой болезненной отладки. Я думал о разрешении ярлыков на URIs, используемый в качестве фильтра, оценивает и интересно, позволяется ли это согласно остальным архитектуру и если существуют любые лучшие практики.

Например:

У меня есть ресурс, который получает меня классы Java. Затем следующий запрос дал бы мне все классы Java:

GET http://example.org/api/v1/class

Предположим, что я хочу все подклассы Collection Класс Java, затем я использовал бы следующий запрос:

GET http://example.org/api/v1/class?has-supertype=http://example.org/api/v1/class/collection

Тот запрос возвратил бы меня Vector, ArrayList и все другие подклассы Collection Класс Java.

Тот URI довольно длинен все же. Я мог уже сократить его путем разрешения hs как псевдоним для has-supertype. Это дало бы мне:

GET http://example.org/api/v1/class?hs=http://example.org/api/v1/class/collection

Другой способ позволить короче URIs состоял бы в том, чтобы позволить псевдонимы для префиксов URI. Например, я мог определить class как псевдоним для префикса URI http://example.org/api/v1/class/. Который дал бы мне следующую возможность:

GET http://example.org/api/v1/class?hs=class:collection

Другая возможность состояла бы в том, чтобы удалить псевдоним класса полностью и всегда снабжать префиксом значение параметра http://example.org/api/v1/class/ поскольку это - единственная вещь, которую я поддерживал бы. Это повернуло бы запрос на все подтипы Collection в:

GET http://example.org/api/v1/class?hs=collection

Эти "упрощения" исходного запроса URI все еще соответствуют принципам архитектуры REST? Или я просто действовал сгоряча?

ПРИЛОЖЕНИЕ: мог бы быть больше чем один фильтр в URI сразу. Или как различные параметры, или как список значений для единственного параметра. Думайте вроде "Всех классов, что Интерфейс реализации X и/или Интерфейс Y" или "Все классы, которые реализуют Интерфейс X и находятся в пакете A.B.C" (где пакеты также были бы адресуемы к URI как http://example.org/api/v1/packages/a/b/c)

7
задан dafmetal 12 May 2010 в 13:48
поделиться

1 ответ

Я бы сделал:

GET http://example.org/api/v1/class/java.util.Collection/subclasses

вернуть список ссылок на другие записи в вашем RESTful API, по одной для каждого прямого подкласса. Я бы также сделал эту информацию доступной как часть дескриптора, возвращаемого:

GET http://example.org/api/v1/class/java.util.Collection

(это также будет включать ссылку на предыдущий конкретный запрос.)

4
ответ дан 7 December 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: