You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.9 KiB

Історія, дизайн і майбутнє

Певний час тому один користувач FastAPI запитав:

Яка історія цього проєкту? Здається, що він з’явився нізвідки й за кілька тижнів став чудовим [...]

Ось трохи цієї історії.

Альтернативи

Протягом кількох років я створював API зі складними вимогами (Machine Learning, розподілені системи, асинхронні задачі, NoSQL бази даних тощо), керуючи кількома командами розробників.

У межах цього мені потрібно було дослідити, протестувати й використовувати багато альтернатив.

Історія FastAPI значною мірою — це історія його попередників.

Як сказано в розділі Альтернативи{.internal-link target=_blank}:

FastAPI не існував би без попередньої роботи інших людей.

До цього було створено багато інструментів, які допомогли надихнути його появу.

Я уникав створення нового framework протягом кількох років. Спочатку я намагався реалізувати всі можливості, які охоплює FastAPI, використовуючи багато різних frameworks, plug-ins та інструментів.

Але в певний момент не залишилося іншого варіанту, окрім як створити щось, що надає всі ці можливості: взяти найкращі ідеї з попередніх інструментів і поєднати їх найкращим можливим способом, використовуючи можливості мови, яких раніше навіть не було (type hints у Python 3.6+).

Дослідження

Використовуючи всі попередні альтернативи, я мав можливість повчитися на кожній із них, взяти ідеї та поєднати їх найкращим способом, який я зміг знайти для себе та команд розробників, з якими працював.

Наприклад, було очевидно, що в ідеалі все має базуватися на стандартних Python type hints.

Також найкращим підходом було використання вже наявних стандартів.

Тож ще до того, як почати писати код FastAPI, я витратив кілька місяців на вивчення специфікацій OpenAPI, JSON Schema, OAuth2 тощо. Щоб зрозуміти їхні взаємозв’язки, перетини та відмінності.

Дизайн

Потім я витратив певний час на проєктування «API» для розробника, яке я хотів мати як користувач (як розробник, що використовує FastAPI).

Я протестував кілька ідей у найпопулярніших Python-редакторах: PyCharm, VS Code, редакторах на базі Jedi.

Згідно з останнім Python Developer Survey, який охоплює близько 80% користувачів.

Це означає, що FastAPI спеціально тестували в редакторах, якими користуються 80% Python-розробників. А оскільки більшість інших редакторів зазвичай працюють подібно, усі його переваги мають працювати практично в усіх редакторах.

Так я зміг знайти найкращі способи максимально зменшити дублювання коду, мати автодоповнення всюди, перевірки типів і помилок тощо.

Усе це — так, щоб забезпечити найкращий досвід розробки для всіх розробників.

Вимоги

Після тестування кількох альтернатив я вирішив, що використовуватиму Pydantic через його переваги.

Потім я зробив внесок у його розвиток, щоб забезпечити повну відповідність JSON Schema, підтримати різні способи визначення декларацій обмежень і покращити підтримку редакторів (перевірки типів, автодоповнення) на основі тестів у кількох редакторах.

Під час розробки я також зробив внесок у Starlette — іншу ключову вимогу.

Розробка

На момент, коли я почав створювати сам FastAPI, більшість частин уже були на місці: дизайн визначено, вимоги та інструменти готові, а знання про стандарти й специфікації були чіткими та свіжими.

Майбутнє

На цьому етапі вже зрозуміло, що FastAPI з його ідеями є корисним для багатьох людей.

Його обирають замість попередніх альтернатив, бо він краще підходить для багатьох сценаріїв використання.

Багато розробників і команд уже залежать від FastAPI у своїх проєктах (включно зі мною та моєю командою).

Але попереду ще багато покращень і нових можливостей.

FastAPI має чудове майбутнє.

І ваша допомога{.internal-link target=_blank} буде дуже цінною.