Англійська для розробників 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.” *
** Контрактне тестування ** — автоматизовані тести, які перевіряють реальні відповіді реалізації відповідно до специфікації, ловлячи дрейф між документацією і реальністю.
“Контрактні тести виявили це — кінцева точка перестала повертати поле
Звичайні режими невдачі
** Дрейф специфікації ** — поступове відхилення між тим, що описано у специфікації OpenAPI і тим, що API насправді робить, зазвичай, від ручних змін на одній стороні без оновлення на іншій.
“Це не помилка клієнта — це дрейф специфікації. Кінець змінився шість місяців тому і ніхто не відновлював документацію. ”
** Розрив зміни (у контракті API) ** — модифікація (вилучення поля, зміна типу, посилення обов’ язкового параметра), яка розірве існуючі споживання, які покладаються на попередню форму.
“Зміна цього поля на обов’ язкове є руйнівною зміною для кожного існуючого клієнта — змініть версію API замість зміни її на місці.”
Поширені помилки
- Розгляд специфікації OpenAPI як додаткову документацію, написану після факту, замість фактичного джерела правди, з якого створюються клієнти.
- Редагування вручну сформованого клієнта коду замість виправлення специфікації і відтворення, що призведе до втрати виправлення під час наступного запуску codegen.
- Назва будь-якої зміни специфікації « просто оновлення документації » без перевірки, чи це насправді зміна, що порушує існуючі споживання.
Практичні вправи
- Поясніть, у двох реченнях, різницю між дрейфом специфікації і справжньою вада реалізації.
- Напишіть короткий коментар PR, у якому поясніть, чому зміна типу поля у специфікації вважається зміною, що призвела до порушення.
- Створити чернетку повідомлення з рекомендацією проектування з урахуванням умов контракту для майбутньої кінцевої точки, на якій буде заблоковано команду інтерфейсу.
Зв’язані ресурси
Розробка прикладних програм: прикладна програма для розробки програмного забезпечення
Будьмо чесними - технічні дискусії можуть швидко стати заплутаними. Під час роботи з API, специфікаціями і потоками розробки, чітке спілкування є * абсолютно * критичним. Ця стаття присвячена створенню необхідних навичок лексичного запасу, особливо для людей, для яких англійська мова не є рідною, але які хочуть впевнено вести професійні розмови щодо OpenAPI і Swagger. Це не про запам’ятовування визначення; це про розуміння нюансів того, як ці концепції обговорюються в контексті команди розробників. Ми розглянемо формулювання, що сприяє ясності, уникнення двозначності, і забезпечує, що всі знаходяться на одній сторінці - важливо для гладкої співпраці, ефективних переглядів коду і успішних результатів проекту.
** Розуміння основних концепцій - поза бузловими словами **
Перед тим, як зануритися в конкретні фрази, давайте визнаємо фундаментальну різницю між просто * знанням * терміну, такого як «схема», і справжнім розумінням його ролі в контракті API. Не достатньо просто сказати « у нас є схеми ». Нам слід обговорити, як ці схеми визначають структури даних, обмеження на типи даних і, врешті- решт, забезпечують послідовність у всіх ваших кінцевих точках API. Аналогічно, «операція» не просто про те, що робить функція; це контрактна угода про те, що кінцева точка забезпечує - її вхідні параметри, очікувані відповіді і потенційне оброблення помилок.
** Практичні фрази та сценарії **
Розглянемо деякі з практичних фраз, які ви можете почути або використовувати у коментарі перегляду коду або повідомленні Slack:
-
** Замість: ** “Це пошкоджено.” ** TRY: ** « Формат відповіді не збігається з визначенням схеми для цієї дії. Зокрема, поле
status_codeне знаходиться в очікуваному діапазоні. “Це негайно надає контекст і направляє увагу на конкретну проблему. -
** Замість: ** « Чи можете ви це виправити? » (часто неоднозначне) ** Спробуйте: ** « Чи можете ви дослідити потенційну невідповідність у запиті? У документації для
user_idзапропоновано рядковий тип, але код зараз передає ціле число. » Цей символ підсвічує * причину * запиту і надає важливу інформацію. -
** Щодо описів PR: ** « Ця зміна реалізує оновлену схему для профілів користувачів, включаючи нові поля для перевірки адрес ». Зауважте, що у цьому описі йдеться про те, що було змінено (оновлення схеми) і чому (перевірка адреси).
-
В обговореннях 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. Цей приклад демонструє короткий і однозначний підхід, важливий для ефективного спілкування.