Какой URI можно использовать для запроса ресурса по умолчанию? - PullRequest
2 голосов
/ 09 марта 2011

При создании новых ресурсов в моем REST API я хочу дать пользователю возможность запрашивать пустой ресурс, который уже содержит некоторые значения по умолчанию.Поскольку у него нет идентификатора как такового, я не совсем уверен насчет RESTful URI, который я мог бы использовать.Некоторые идеи:

http://example.com/resource/_
http://example.com/resource/__new

Есть предложения или опыт по этому вопросу?

1 Ответ

1 голос
/ 09 марта 2011

Я думаю, что это больше UI, чем API - то есть пользовательский интерфейс должен предварительно заполнить значения по умолчанию в соответствующих полях формы для пользователя, который затем просто заполнит пробелы и настроит значения по умолчанию если необходимо. Однако это не везде применимо (например, когда у вас есть только API без бита UI).

Вы уже предложили некоторые варианты сами - они будут работать, однако, при условии, что вы можете получить доступ к существующим ресурсам как /resource/123, оба варианта по крайней мере немного нарушат ваш URI. Я могу придумать три варианта того, как подойти к этому, последний (третий) может быть лучшим выбором.

Подход № 1
Лучшим подходом может быть имитация способа, которым трудоемкие задачи обычно выполняются в REST. Обычно у вас есть ресурс, к которому вы отправляете задачу, затем служба отвечает URI задачи, который вы можете использовать позже для проверки хода выполнения задачи. Мы можем адаптировать его к нашему случаю - определить пустые ресурсы со значениями по умолчанию как новый ресурс, который мы можем использовать, чтобы получить «шаблон» для другого ресурса .

Пример:
Предполагая, что вы хотите получить шаблон для ресурса под названием «пользователь». Сначала необходимо выполнить запрос POST к ресурсу шаблона и указать тип ресурса, для которого вы хотите создать «шаблон»:

POST /template/

<?xml version="1.0" encoding="UTF-8" ?>
<template>
    <type>user</type>
</template>

API создаст новый ресурс "по умолчанию" для указанного типа, в случае успеха он ответит:

HTTP/1.1 204 No Content
Location /user/123

Местоположение, указанное в ответе вашего API, будет содержать шаблон для ресурса:

GET /user/123

<?xml version="1.0" encoding="UTF-8" ?>
<user>
    <id>123</id>
    <name />
    <email />
    <preferred-language>en</preferred-language>
    <timezone>UTC</timezone>
    ...
</user>



Подход № 2

Подход № 1 уже создает ресурс для вас. Альтернативный подход заключается в предоставлении пользователям доступа к шаблонам для определенного URI.

Пример:

GET /template/user

<?xml version="1.0" encoding="UTF-8" ?>
<user>
    <name />
    <email />
    <preferred-language>en</preferred-language>
    <timezone>UTC</timezone>
    ...
</user>



Подход № 3

Есть еще одна альтернатива - я считаю, что это самый простой и логичный подход, но он может не подходить для всех случаев. Вы можете создать пустой ресурс со значениями по умолчанию, выполнив запрос POST непосредственно к ресурсу, с которым вы хотите работать. Одним из недостатков может быть то, что это не позволит пользователям просто просматривать шаблон (что они могли бы сделать в подходе № 1), оно всегда будет создавать для них ресурс (аналогично подходу № 1).

Пример:
Чтобы получить версию ресурса по умолчанию, вы должны отправить пустой POST-запрос этому ресурсу:

POST /user/

API создаст новый ресурс со значениями по умолчанию и ответит:

HTTP/1.1 204 No Content
Location /user/123

То же, что и в подходе № 1, URI позволит пользователю получить созданный ресурс и затем изменить его при необходимости (через PUT):

GET /user/123

<?xml version="1.0" encoding="UTF-8" ?>
<user>
    <id>123</id>
    <name />
    <email />
    <preferred-language>en</preferred-language>
    <timezone>UTC</timezone>
    ...
</user>
...