Англійська для розробників OpenAPI і Swagger

Словник для розробників, які пишуть специфікації OpenAPI — схеми, операції, тестування контрактів і кодген — для команд, які обговорюють контракти API англійською мовою.

Розмови OpenAPI знаходяться на межі між «чим API насправді займається» і «чим ми обіцяли, що він займається», і більшість плутанини виникає від розгляду специфікації як документації, а не як самого договору. Словник, наведений нижче, дозволяє команді точно сказати, з якої сторони цієї межі знаходиться вада.


Специфікація

** Специфікація OpenAPI (також відома як Swagger spec)** — машинно-читальний (YAML або JSON) документ, що описує кінцеві точки API, форми запитів/відповідей і автентифікацію, з яких можуть бути створені документи, клієнти і моки.

“Swagger — це старіша назва інструментів — OpenAPI — це поточний формат специфікації, і більшість людей використовують ці терміни взаємозамінно.”

Operation — єдина комбінація кінцевої точки-плюс-методу в специфікації (наприклад, GET /users/{id} ), з власними параметрами, тілом запиту і визначеними можливими відповідями.

  • “Додати нову операцію для цієї кінцевої точки замість перевантаження існуючої операції необов’ язковим параметром запиту, який змінює форму всієї відповіді.” *

Schema — структурне визначення форми тіла запиту або відповіді, зазвичай повторно використовується в декількох операціях через $ref.

  • “Не дублюйте цю схему у трьох місцях — видобутіть її один раз і вказуйте на неї скрізь, щоб перейменування поля потребувало лише одного редагування.” *

Контракт і кодген

** Контракт-перший дизайн ** - написання специфікації OpenAPI перед реалізацією кінцевої точки, тому форма API узгоджується і переглядається до того, як існує будь-який код.

“Ми почали з контракту на цьому — команда фронтенд почала будувати проти імітаційного сервера, поки бекенд все ще був в процесі.”

Codegen (генерування коду) — автоматичне створення клієнтських SDK, серверних шаблонів або визначень типів безпосередньо зі специфікації, тому вручну написаний код не може відхилятися від документованого контракту.

  • “Відтворити клієнта з специфікації замість редагування створеного файла вручну — ваш виправлення буде тихо перезаписано під час наступного запуску codegen.” *

** Контрактне тестування ** — автоматизовані тести, які перевіряють реальні відповіді реалізації відповідно до специфікації, ловлячи дрейф між документацією і реальністю.

“Контрактні тести виявили це — кінцева точка перестала повертати поле email, яке специфікація все ще обіцяє, і ніхто не оновив обидві сторони.”


Звичайні режими невдачі

** Дрейф специфікації ** — поступове відхилення між тим, що описано у специфікації OpenAPI і тим, що API насправді робить, зазвичай, від ручних змін на одній стороні без оновлення на іншій.

“Це не помилка клієнта — це дрейф специфікації. Кінець змінився шість місяців тому і ніхто не відновлював документацію. ”

** Розрив зміни (у контракті API) ** — модифікація (вилучення поля, зміна типу, посилення обов’ язкового параметра), яка розірве існуючі споживання, які покладаються на попередню форму.

“Зміна цього поля на обов’ язкове є руйнівною зміною для кожного існуючого клієнта — змініть версію API замість зміни її на місці.”


Поширені помилки

  • Розгляд специфікації OpenAPI як додаткову документацію, написану після факту, замість фактичного джерела правди, з якого створюються клієнти.
  • Редагування вручну сформованого клієнта коду замість виправлення специфікації і відтворення, що призведе до втрати виправлення під час наступного запуску codegen.
  • Назва будь-якої зміни специфікації « просто оновлення документації » без перевірки, чи це насправді зміна, що порушує існуючі споживання.

Практичні вправи

  1. Поясніть, у двох реченнях, різницю між дрейфом специфікації і справжньою вада реалізації.
  2. Напишіть короткий коментар PR, у якому поясніть, чому зміна типу поля у специфікації вважається зміною, що призвела до порушення.
  3. Створити чернетку повідомлення з рекомендацією проектування з урахуванням умов контракту для майбутньої кінцевої точки, на якій буде заблоковано команду інтерфейсу.

Зв’язані ресурси

Розробка прикладних програм: прикладна програма для розробки програмного забезпечення

Будьмо чесними - технічні дискусії можуть швидко стати заплутаними. Під час роботи з API, специфікаціями і потоками розробки, чітке спілкування є * абсолютно * критичним. Ця стаття присвячена створенню необхідних навичок лексичного запасу, особливо для людей, для яких англійська мова не є рідною, але які хочуть впевнено вести професійні розмови щодо OpenAPI і Swagger. Це не про запам’ятовування визначення; це про розуміння нюансів того, як ці концепції обговорюються в контексті команди розробників. Ми розглянемо формулювання, що сприяє ясності, уникнення двозначності, і забезпечує, що всі знаходяться на одній сторінці - важливо для гладкої співпраці, ефективних переглядів коду і успішних результатів проекту.

** Розуміння основних концепцій - поза бузловими словами **

Перед тим, як зануритися в конкретні фрази, давайте визнаємо фундаментальну різницю між просто * знанням * терміну, такого як «схема», і справжнім розумінням його ролі в контракті API. Не достатньо просто сказати « у нас є схеми ». Нам слід обговорити, як ці схеми визначають структури даних, обмеження на типи даних і, врешті- решт, забезпечують послідовність у всіх ваших кінцевих точках API. Аналогічно, «операція» не просто про те, що робить функція; це контрактна угода про те, що кінцева точка забезпечує - її вхідні параметри, очікувані відповіді і потенційне оброблення помилок.

** Практичні фрази та сценарії **

Розглянемо деякі з практичних фраз, які ви можете почути або використовувати у коментарі перегляду коду або повідомленні Slack:

  1. ** Замість: ** “Це пошкоджено.” ** TRY: ** « Формат відповіді не збігається з визначенням схеми для цієї дії. Зокрема, поле status_code не знаходиться в очікуваному діапазоні. “Це негайно надає контекст і направляє увагу на конкретну проблему.

  2. ** Замість: ** « Чи можете ви це виправити? » (часто неоднозначне) ** Спробуйте: ** « Чи можете ви дослідити потенційну невідповідність у запиті? У документації для user_id запропоновано рядковий тип, але код зараз передає ціле число. » Цей символ підсвічує * причину * запиту і надає важливу інформацію.

  3. ** Щодо описів PR: ** « Ця зміна реалізує оновлену схему для профілів користувачів, включаючи нові поля для перевірки адрес ». Зауважте, що у цьому описі йдеться про те, що було змінено (оновлення схеми) і чому (перевірка адреси).

  4. В обговореннях Slack: «Давайте роз’яснимо очікуваний тип даних для поля email в кінцевій точці /users. Специфікація OpenAPI визначає його як рядок, але я бачу, що передається ціле число». Це свідчить про активне слухання і бажання переконатися, що всі розуміють узгоджене визначення.

** Реалістичний приклад коду (ілюстративний) **

Давайте розглянемо фрагмент YAML, що представляє визначення Swagger/ OpenAPI:

paths:
  /users:
    post:
      summary: Create a new user
      operationId: createUser
      parameters:
        - in: query
          name: user_id
          schema:
            type: string
          required: true
      responses:
        '201':
          description: User created successfully.

Зауважте ясну фразу - summary, operationId, parameters - всі безпосередньо пов’язані з тим, як кінцева точка API визначається і документується. Використання schema: в межах визначення параметрів явно вказує очікуваний тип даних для user_id. Цей приклад демонструє короткий і однозначний підхід, важливий для ефективного спілкування.

Поширені запитання

Про що ця стаття "Англійська для розробників OpenAPI і Swagger"?

Словник для розробників, які пишуть специфікації OpenAPI — схеми, операції, тестування контрактів і кодген — для команд, які обговорюють контракти API англійською мовою.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська для розробників OpenAPI і Swagger"?

Приблизно 6 min.