2013-08-18 3 views
0

Итак, я потратил много времени на создание классного 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.

ответ

2

Один из вариантов - это двухрежимный API: принять JSON и ввод данных формы, испустить JSON и HTML (или фрагменты HTML) в ответ.

HTML-фрагменты начинают восприниматься в контексте бесшовных фреймов; Тем временем этот подход все равно будет принимать javascript на клиенте. Полный HTML - это классический веб-сайт - ничего не мешает вашим ресурсам быть представленными как HTML, так и JSON.

Accept и Content-Type заголовки - ваш друг. Не на мгновение путайте URL своего ресурса с его представлением с самим ресурсом. Это три отдельные вещи. Да, иногда это грязно. Так мир!

+0

Кажется интересным, но неужели для пользователя '/ api/v1/users' в адресной строке это не будет смущать? Вероятно, он ожидал '/ register.html'. – Tom

+0

Еще одна проблема с решением проблем ввода на адрес, отличный от исходного адреса 'register.html', заключается в том, что, хотя это по существу та же страница, адрес отличается от другого. Это смущает поисковые системы и испортит аналитику сайта. – Tom

+0

И чтобы продолжить. Если пользователь должен обновить страницу (перейти к тому же адресу), браузер отправит запрос GET в '/ api/v1/users', который имеет совершенно другое значение. Этот запрос будет извлекать всех пользователей, чего пользователь не ожидал. – Tom