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} буде дуже цінною.