Я желаю сделать API быстро, после принципов REST - для простого веб-приложения, которое я создал. Первое место API будет использоваться, должно взаимодействовать через интерфейс с приложением для iPhone. API только должен обработать несколько базовых вызовов, но все требуют аутентификации, ничто не общедоступные данные.
Так, следующие принципы REST, я установил бы схему uri?:
и ответы будут в XML для начала, JSON слишком позже.
На веб-сайте пользователи входят в систему с электронной почтой и паролем. Я должен позволить им заставить 'маркер' на своей странице профиля передавать с каждым запросом API? (сделал бы одинокий '/auth' ресурсом URI избыточный).
Лучшие практики для структурирования ответа xml? Кажется с REST, что необходимо возвратиться или 200 хорошо и XML или фактические надлежащие коды состояния т.е. 401 и т.д.
Ценятся любые общие указатели.
1- для аутентификации, возможно, вы захотите рассмотреть что-то вроде http-basic или digest auth (обратите внимание - basic, в частности, небезопасен, если не работает через https)
для урлов схема:
2- коды состояния должны отражать статус - 200 для OK, 401 для отказа в доступе, 404 для не найдено, 500 для обработки ошибки. Как правило, вы должны возвращать XML-запись только в том случае, если у вас хороший запрос
Аутентификация в API всегда работает путем отправки некоторого токена аутентификации в заголовке запроса. То есть, даже при использовании отдельного подхода к входу в систему / auth
, вы должны вернуть пользователю некоторый токен, возможно, cookie, который необходимо будет отправлять вместе с каждым запросом.
HTTP уже предоставляет для этой цели специальный заголовок : Авторизация
.
Самая простая HTTP-авторизация - это Базовая аутентификация доступа HTTP :
Authorization : Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Дайджест-аутентификация - еще одна, более безопасная схема. Вы можете использовать это поле заголовка для любой формы аутентификации, которую захотите, даже для вашей собственной реализованной аутентификации.
Authorization : MyCustomAuthentication foo:bar:n293f82jn398n9r
Вы можете отправить вышеупомянутый токен входа в это поле. Или вы можете использовать схему подписи запроса, в которой определенные поля запроса хешируются вместе с паролем пользователя, в основном отправляя пароль без отправки пароля (аналогично дайджест-аутентификации, но вы можете использовать что-то получше, чем md5
). Это отменяет отдельный шаг входа в систему. AWS использует этот метод .
Для API в целом хорошо используйте коды состояния HTTP , чтобы указать, что происходит.
В целом вы на правильном пути. Схема URI должна быть основана на идее ресурсов, и вы должны использовать соответствующий метод для выполнения работы.
Итак, GET для получения информации. POST (или, может быть, PUT) для создания/изменения ресурсов. DELETE для удаления. И HEAD для проверки метаданных.
Структура вашего XML не имеет много общего с RESTful API, если предположить, что она не требует управления состоянием. Тем не менее, у вас правильная идея. Если это хороший запрос, верните нужный XML (для GET-запроса) и код состояния 200. Если это плохой запрос, вы также можете, а в некоторых случаях и должны, вернуть что-то еще, кроме кода состояния. В общем, ознакомьтесь со спецификацией HTTP и следуйте ей как можно точнее.