Я нахожусь на стадии планирования и на начальном этапе написания своего первого полноценного API для крупномасштабного приложения. За последние годы я использовал несколько API, но меня впервые попросили создать что-то, что позволит взаимодействовать на программном уровне на этом уровне.
Я провел немало исследований в поисках лучших практик и тому подобного и определил, что, я думаю, предложит довольно гибкую систему реагирования.
Мои вопросы:
Это то, что вы ожидаете увидеть как взаимодействие API?
Я что-то упустил?
Объяснение API:
Я собираюсь использовать протокол HTTP Type 1 для связи и уникальный ключ API для аутентификации.
Я ожидаю, что это будет происходить через запросы CURL через соединение SSL.
Пример успешного (200 ОК) XML-ответа (запрос ограничения скорости):
<?xml version="1.0" encoding="UTF-8"?>
<node>
<short_message>Request Complete</short_message>
<long_message>Rate Limit Status Response</long_message>
<response_data>
<rate_limit>40</rate_limit>
<rate_used>31</rate_used>
</response_data>
</node>
Пример ошибочного ответа XML (будет отправлен с соответствующим заголовком 400/500);
<?xml version="1.0" encoding="UTF-8"?>
<node>
<error_code>1201</error_code>
<short_message>API Error</short_message>
<long_message>The requested API version (1.5) is invalid</long_message>
</node>
Кроме того, я устанавливаю коды ошибок, которые будут использоваться в поисковой документации для облегчения мигрени у других разработчиков. Пропуск / неудача запроса будет передан через соответствующие HTTP-коды - Успешно (200), неверные запросы (400), метод не найден (404), ошибка аутентификации (403) и т. Д.
Я также использую конечные точки на основе версии, чтобы любые изменения кода не требовали внешних изменений кода.
Наконец, разработчики смогут запрашивать все ответы в сериализованных массивах XML, JSON или PHP.
Внутренние части моего кода очень просты. Все данные передаются через POST (возможно, с использованием CURL или другой альтернативы), включая уникальный ключ API Этот ключ API связан с пользователем в системе, что позволит внутренним методам выполнять ограниченный набор функций, которые включены для этого конкретного пользователя.
Я придерживаюсь «золотого правила» API - «Всегда добавлять, никогда не удалять».
Итак ... что еще мне следует рассмотреть и что я пропустил?