Мне интересно узнать, какие подходы люди предпринимали при создании RESTful (или квази-RESTful) API для своих веб-приложений.
Практический пример:
Скажем, у вас есть традиционное веб-приложение на основе браузера, которое использует CSRF-защиту для всех форм. Скрытый ввод с токеном защиты CSRF включен в каждую форму, представленную в браузере. При подаче формы, если этот вход не соответствует версии токена на стороне сервера, форма считается недействительной.
Теперь скажите, что вы хотите открыть веб-приложение как API (возможно, используя JSON вместо HTML). Традиционно при публикации API я рассматривал транзакции как односторонние (это означает, что пользователь API строит запрос на основе опубликованного API вместо того, чтобы сначала запрашивать форму, а затем строить запрос с использованием возвращаемой формы).
"Односторонний" подход разрушается, когда такие факторы, как фактор защиты CSRF. Ключ защиты CSRF должен быть включен в любые POSTS/PUTS/DELETES, отправленные потребителем API.
Я пытался подумать, как лучше всего это решить. Запрос формы каждый раз, когда вызов API должен быть сделан, кажется очень неудобным (особенно при работе с асинхронными операциями), но все другие альтернативы, о которых я думал, по-видимому, побеждают защиту CSRF (или, по крайней мере, дыры в нем), что неприемлемо.
У кого-нибудь из вас есть понимание этого?
Спасибо.
(Не то, чтобы это было слишком важно, поскольку проблема является концептуальной и агностической для платформы, но я имею дело с традиционным стеком LAMP и использую Symfony 1.4 в качестве платформы приложения. Моя цель - опубликовать веб-сайт формата JSON API, позволяющий разработчикам создавать мобильные/настольные приложения, которые хорошо сочетаются с существующим веб-приложением.)