HTTP Ръководство за изграждане на API

Това ръководство съдържа насоки за проектиране на HTTP API, които са извлечени от API на облачната платформа Heroku, а също така съдържа информация за нова функционалност и вътрешни API в Heroku.

Основните ни цели при изграждането на API са последователност и фокус върху внедряването на бизнес логика. Търсим различни, не непременно най-добрите, но добре документирани начини за разработване на API.

Тази статия предполага, че сте запознати с основните принципи на HTTP и JSON.

Принципът на разделение на отговорността

Когато проектирате, опитайте се да улесните системата, като разделите отговорността между различните части на цикъла на заявка-отговор. В същото време простотата на взетите решения ще ни позволи да се концентрираме върху решаването на все по-сложни проблеми. Исканията и отговорите се извършват, за да се получи достъп до определен ресурс или набор от ресурси. За да дефинирате обекта, който да получите, използвайте пътя на отговора и тялото за предаване на съдържание и заглавките за предаване на метаданни. Можете да предадете всички параметри в тялото на заявката, но, както показва практиката, това решение е по-малко гъвкаво. По-правилен подход би бил предаването на част от параметрите в хедърите.

Изисквайте използването на защитени връзки

Използвайте само защитени TLS връзки за извличане на данни с помощта на API.
По-добро решение би било да се отхвърлят всички заявки, които не използват TLS, а именно заявки през http или на порт 80, за да се избегне несигурен обмен на данни. В случаите, когато това не е възможно, отговорете с 403 Забранен отговор .

Пренасочванията се обезкуражават, тъй като позволяват неправилно поведение на клиента, без да се предоставят ясни обяснения. Клиентите, които разчитат на пренасочвания, удвояват по този начин сървърния трафик и използването на TLS в този случай е безполезно, тъй като важните данни са незащитени при първото обаждане.

Изисквайте версията в заглавката Accept

Наличието на множество версии и преминаването между тях може да бъде един от най-трудните аспекти при проектирането и използването на API. Ето защо е по-добре да вземете този момент предвид предварително.

За да попречите на клиента да използва нестабилен API, най-добре е да проверите за неговата версия във всяка заявка. Трябва обаче да избягвате да указвате версията по подразбиране, тъй като това значително усложнява заглавието и тази версия може също да се промени в бъдеще.

Най-добре е да добавите версията в заглавката заедно с други метаданни, като използвате заглавката Accept с персонализиран тип съдържание:

Използвайте ETags Header за кеширане

Включете заглавката ETags във всички заявки, като посочите версията на върнатия ресурс. Това ще позволи на потребителите да кешират ресурси и да прилагат условни заявки, като използват заглавката If-None-Match, за да определят дали кешът трябва да се актуализира или не.

Използвайте Request-ID за самоанализ

Включете заглавката Request-Id, съдържаща стойността на UUID във всеки отговор на сървъра. Като регистрирате тези стойности в клиента, сървъра или друга услуга, можете да отстранявате грешки и да диагностицирате проблеми с заявките.

Разделете големите отговори на сървъра на по-малки, като използвате заглавката Range

Големите отговори трябва да бъдат разделени на по-малки, като се използва заглавката Range. За повече информация относно заглавките на заявките/отговорите, кодовете на състоянието и ограниченията вижте дискусията за използване на API на платформата Heroku. .

Върнете подходящи кодове за състояние

Върнете съответния HTTP код на състоянието във всеки отговор. Успешните отговори трябва да съдържат следните кодове на състоянието:

  • 200 - GET заявката е завършена успешно, синхронната DELETE или PATCH заявка е завършена успешно или синхронната PUT заявка актуализира съществуващ ресурс.
  • 201 - Завършена синхронна POST заявка, синхронната PUT заявка създаде нов ресурс.
  • 202 - Получена е заявка за POST, PUT, DELETE или PATCH, която ще бъде обработена асинхронно.
  • 206 - GET заявката е успешна, но ще бъде върнат частичен отговор (вижте раздела в заглавката Range).

Върнете съответните кодове за грешки, за да предоставите повече информация за причините за тях:

  • 422 Unprocessable Entity - Вашето искане е разпознато, но съдържа невалидни параметри.
  • 429 Твърде много заявки - Лимитът на заявките е надвишен, моля, опитайте по-късно.
  • 500 Вътрешна грешка в сървъра - Проблем от страна на сървъра, проверка на състоянието на сайта и/или докладване на проблем.