Итак, я потратил много времени на создание классного RESTful API. Для упрощения можно создать нового пользователя, выполнив запрос POST
к /users
.Предоставление HTML-форм использует JSON API
Отлично, да? Но теперь моя HTML-форма хочет создать пользователя. Все его элементы идентичны аргументам, которые необходимо передать в /users
. Таким образом, для form
, для полного использования этого превосходного API, очень важно.
Моя форма находится на /register.html
. Сейчас его свойства: action="/users" method="post"
. Отличная интеграция с моим API прямо из коробки!
Проблема? Мой RESTful API ответит в JSON, и моя форма не сможет справиться с этим ответом. Например, когда передается недопустимый адрес электронной почты, возвращенный элемент может быть {"error": 400, "msg": "The given email address is invalid."}
. Вместо этого register.html
должен получить это сообщение и отобразить соответствующее сообщение, позволяя пользователю исправить ошибку ввода.
Очевидным решением было бы не отправлять форму вообще, а вместо этого использовать AJAX для взаимодействия с API на основе значений входных данных. Однако это далеко не идеально, потому что форма была бы бесполезна для тех, у кого нет Javascript.
Есть ли какой-либо другой подход, который я могу рассмотреть? Или мне не следует вводить пару данных с моими API?
Я не думаю, что это имеет большое значение, но я работаю с Node.js.
Кажется интересным, но неужели для пользователя '/ api/v1/users' в адресной строке это не будет смущать? Вероятно, он ожидал '/ register.html'. – Tom
Еще одна проблема с решением проблем ввода на адрес, отличный от исходного адреса 'register.html', заключается в том, что, хотя это по существу та же страница, адрес отличается от другого. Это смущает поисковые системы и испортит аналитику сайта. – Tom
И чтобы продолжить. Если пользователь должен обновить страницу (перейти к тому же адресу), браузер отправит запрос GET в '/ api/v1/users', который имеет совершенно другое значение. Этот запрос будет извлекать всех пользователей, чего пользователь не ожидал. – Tom