Как предоставить API проверки в спокойном режиме?



Я вообще поклонник дизайна RESTful API, но я не уверен, как применять принципы REST для API проверки.



предположим, что у нас есть API для запроса и обновления информации профиля пользователя (имя, адрес электронной почты, имя пользователя, пароль). Мы посчитали, что полезной частью функциональности для предоставления будет проверка, например, запрос, является ли данное имя пользователя действительным и доступным.



каковы ресурсы в этом случае? Какие коды состояния HTTP и / или заголовки должны быть использовали?



для начала, у меня есть GET /profile/validate который принимает параметры строки запроса и возвращает 204 или 400 если допустимо или недопустимо. Но validate - это явно глагол, а не существительное.

650   4  

4 ответов:

тип вещи, которую вы описали, конечно, более RPC-стиль в своей семантике, но это не значит, что вы не можете достичь своих целей в спокойной манере.

нет VALIDATE http глагол, так сколько значение вы можете получить от структурирования всего API вокруг этого? Ваша история сосредотачивается вокруг предоставления пользователям возможности определить, доступно ли данное имя пользователя - это звучит для меня как простая проверка поиска ресурсов - GET: /profile/username/... - если результат равен 404, то имя доступно.

это подчеркивает, что эта проверка на стороне клиента-это просто сторона клиента. Это проблема пользовательского интерфейса, чтобы гарантировать, что данные проверяются на клиенте перед отправкой на сервер. Служба RESTful не дает ни малейшего представления о том, выполнял ли клиент проверку; она просто принимает или отклоняет запрос на основе своей собственной логики проверки.

REST не является всеобъемлющей парадигмой, он только описывает способ структурирования клиент-сервер система связи.

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

о вашем сервисе, что я бы сделал, это использовать тот же ресурс, который вы используете для обновления, но с test параметр querystring, поэтому когда test=1 операция не выполнена, но вы можете использовать ее для возврата ошибок проверки.

PATCH /profile?test=1
Content-Type: application/x-www-form-urlencoded

dob=foo

... и ответ:

HTTP/1.1 400 Bad Request
Content-Type: text/html

<ul class="errors">
  <li data-name="dob">foo is not a valid date.</li>
</ul>

мы столкнулись с той же проблемой. Наша аргументация для того, чтобы клиент отложил на сервер для проверки, заключалась в том, чтобы предотвратить несоответствие правил. Сервер должен проверить все, прежде чем действовать на ресурсы. Не было смысла кодировать эти правила дважды и иметь этот потенциал для их выхода из синхронизации. Поэтому мы придумали стратегию, которая, похоже, соответствует идее отдыха и в то же время позволяет нам просить сервер выполнить утверждение.

наш первый шаг состоял в реализации объекта метаданных, который может быть запрошен из службы метаданных (GET /metadata/user). Этот объект метаданных затем используется для указания клиенту, как выполнять основные проверки на стороне клиента (requiredness, type, length и т. д.). Мы создаем большинство из них из нашей базы данных.

вторая часть состоит из добавление нового ресурса под названием Анализ. Так, например, если у нас есть услуги:

GET /users/100

мы создадим новый ресурс звонил:

POST /users/100/analysis

ресурс анализа содержит не только любые ошибки проверки, которые произошли, но и статистическую информацию, которая может быть актуальной, если это необходимо. Одним из вопросов, которые мы обсуждали, был вопрос о том, какой глагол использовать для ресурса анализа. Мы пришли к выводу, что это должен быть пост, как анализ создается в момент запроса. Однако, есть веские аргументы в пользу вам, а также.

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

это здорово, чтобы иметь проверку в REST API. Вам все равно нужна проверка, и вы не должны использовать ее на стороне клиента. В моем случае у меня просто есть соглашение в API, что специальный error_id представляет ошибки проверки, а в error_details есть массив сообщений об ошибках для каждого поля, которое имеет ошибки в этом вызове PUT или POST. Для examople:

{
  "error": true,
  "error_id": 20301,
  "error_message": "Validation failed!",
  "error_details": {
    "number": [
      "Number must not be empty"
    ],
    "ean": [
      "Ean must not be empty",
      "Ean is not a valid EAN"
    ]
  }
}

Если вы используете тот же REST API для веб-и мобильных приложений, вам понравится возможность изменения проверка в обоих только путем обновления API. Особенно мобильные обновления займет более 24 часов, чтобы получить опубликованы на магазинах.

и вот как это выглядит в мобильном приложении: enter image description here

ответ PUT или POST используется для отображения сообщений об ошибках для каждого поля. Это тот же вызов из веб-приложения с помощью React: enter image description here

таким образом, все коды ответа REST API, такие как 200, 404 имеют they'R значит, так и должно быть. Ответы на вызовы PUT с 200, даже если проверка не выполняется. Если вызов проходит проверку ответ будет выглядеть так:

{
  "error": false,
  "item": {
"id": 1,
"created_at": "2016-08-03 13:58:11",
"updated_at": "2016-11-30 08:55:58",
"deleted_at": null,
"name": "Artikel 1",
"number": "1273673813",
"ean": "12345678912222"
  }
}

есть возможные изменения, которые вы могли бы сделать. Мне использовать его без error_id. Если tehre-это error_details, просто зациклите их, и если вы найдете ключ с тем же именем, что и поле, поместите его значение как текст ошибки в то же поле.

Comments

    Ничего не найдено.