Как разработать RESTful API без использования глаголов? - PullRequest
0 голосов
/ 12 октября 2019

РЕДАКТИРОВАТЬ:

Этот вопрос не имеет ничего общего с "будет ли браузер работать с non-restful API" или "заголовки авторизации токена". Этот вопрос связан с API-Design (смотри теги), Передовой опыт и Аутентификация (/login), а не Авторизация ( заголовок токена ).

Я знаю, как создать API, как работает протокол HTTP, что такое RPC и что такое REST. Если вы прочитаете мой вопрос, вы увидите, что я понимаю принципы. Пожалуйста, внимательно прочитайте мой вопрос. Не читайте сам заголовок и отвечайте. Вам нужен контекст, чтобы ответить.


Я пытаюсь разработать REST API без использования глаголов. Это становится все более сложным, так как я сталкиваюсь с такими случаями, как Логин / Аутентификация как с контроллерами.

Например, как мне относиться к естественным контроллерам, таким как Authentication в RESTful Service? Я, наверное, слишком педантичен, если поправите меня, но если мой API содержит запрос типа

GET /authenticate

, то он не считается полностью спокойным по определению. Правильно? Я имею в виду, это явно глагол . Таким образом, это RESTful + RPC API.

И если я нарушу свои принципы REST для /authenticate, то почему я не должен нарушать свои принципы REST для других случаев, которые облегчают мою жизнь? Как некоторые другие контроллеры бизнеса, например:

GET /users (noun) REST
POST /register (verb) RPC
GET /logout (verb) RPC

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

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

Отказ от ответственности: (для невнимательные рецензенты / читатели)

Вероятно, это не дубликат некоторых других вопросов, которые вы, возможно, видели, например: Как создать URL-адреса REST без глаголов?

IЯ знаю, каково правильное решение для этого конкретного вопроса, так как ОП спрашивает кое-что, что может быть очень легко сделано REST.

Моя проблема более семантическая и не так сильно, каквопрос о том, как выполнять базовые операции REST, такие как обновление поля пользователя.

Ни то, что я обнаружил, не является дубликатом, но на самом деле очень похоже Шаблон входа в REST API Пользователь спрашивает, какой подходящий RESTfulдизайн, но он явно не получает никаких ответов, которые отвечают на то, что я спрашиваю. Что является семантикой (глупой или нет) «Является ли дизайн RESTful больше, если у вас есть путь / login в вашем дизайне RESTful». Ответы касаются Авторизации, а не Аутентификации.

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

1 Ответ

1 голос
/ 13 октября 2019

Пример REST-клиента и сервера с локальным входом в систему будет:

API сервера:

  • GET /users/currentUserВозвращает документ JSON, в котором описывается текущий пользователь (отображаемое имя, адрес электронной почты, предпочтение темы, срок действия пароля и т. Д.)
    1. Проверка имени пользователя и пароля в заголовке Authorization: basic, установка контекста. Если недействительно, бросить 401
    2. Получить информацию о пользователе, сериализовать, вернуть
  • GET /todos/Возвращает документ JSON, который содержит все элементы TODO
    1. Проверка имени пользователя и пароля в заголовке Authorization: basic, установка контекста. Если недействительно, бросить 401
    2. Получить элементы списка дел, сериализовать, вернуть

Клиент:

  1. Начать с "Не проверено подлинность""состояние, отображать пользовательский интерфейс входа в систему
  2. Когда нажата кнопка входа в систему, используйте поля имени пользователя и пароля для создания заголовка Authorization: basic и добавления его к клиенту HTTP
  3. Выполните тестовый вызов GET /users/currentUser с заголовком для проверки информации для входа и получения информации о пользователе. Если 401, вход не выполнен - ​​вернитесь к пользовательскому интерфейсу входа.
  4. Сохраните заголовок Authorization: basic и перейдите в состояние «Аутентифицировано», отобразите пользовательский интерфейс приложения
  5. Выполните вызов в формате GET /todos/и дисплей. Если происходит 401, переход в состояние «Неаутентифицировано» (например, пароль изменен другим клиентом)
...