А нельзя ли немного конкретики? Например опубликуйте часть API, расскажите почему он именно такой.
И объясните пожалуйста, почему у вас операция заказа билета идет через POST, а не через PUT, ведь если через API передается запрос на заказ какого-то конкретного билета (с указанием ряда, места), то получается, что это идемпотентная операция (т.е. состояние системы не зависит от того, сколько раз была выполнена операция), и её следует проводить через PUT.
Ну конкретно, приводить примеры API — это уже более частная задача. Я же ставил целью объяснить выбор конкретной идеологии\технологии в рамках широко спектра существующих вариантов.
С билетами в театр немного синтетический пример, но поясню. Перед покупкой билета надо убедиться, что место свободно. Если оно свободно, то создается заказ в статусе «неоплачено», который, если его недозаполнить и не оплатить, удалится, скажем, через 10 минут. Кроме того, есть театры, куда билеты продаются без мест. Туда надо проверять вообще наличие свободных мест.
Таким образом, операция предварительного заказа билета на театр без места по сути — создание объекта «заказ» в системе в статусе «неоплачено». Т.е. если я дважды сделаю этот запрос, то дважды будет создан «заказ». Т.е. операция не является идемпотентной, поэтому POST.
А вот для перевода заказа в статус «оплачен» я буду использовать PUT.
Нет, это не может являться критерием выбора типа запроса. PUT обязан быть идемпотентным!
Например, если вы будете делать инкремент счетчика просмотров существующего ресурса через PUT, то фактически каждый запрос будет изменять состояние этого ресурса, что не подразумевается семантикой PUT-запросов.
Проектировщикам REST API весьма рекомендую скачать и прочитать книгу InfoQ Explores: REST. Отличное описание best practices, anti-patterns и немного дискуссий на тему.
Может, кому-то захочется по этой книге сделать статью или несколько на Хабре.
Ну и, как водится, на случай компрометации ключей необходимо предусматривать инфраструктуру их отзыва, деактивации и т.п. Но для маленьких проектов это, наверное, не слишком актуально.
Имеет ли смысл подписывать сообщения, если не предполагается, что API будет предоставляться пользователями третьим лицам? В этом случае отдельного аккаунта для робота и базовой авторизации по ssl будет достаточно. По крайней мере, так кажется на первый взгляд.
Немного о том как организовывать API веб-службы