Содержание

Лучший фреймворк для разработки API на Python

Python стал популярным выбором для создания API, и существует несколько фреймворков, которые могут помочь разработчикам создавать эффективные, масштабируемые и безопасные API. В этой статье мы рассмотрим некоторые из лучших фреймворков Python для разработки API.

Это вторая статья из серии, посвященной теме API.

Каждая статья раскрывает определенную тему. Если ты только начинаешь разбираться в том, как написать свой API, то будет полезно прочитать все по порядку. Если уже разбираешься и тебя интересует конкретная тема, переходи сразу на нее.

  1. Простое объяснение API
  2. Лучший фреймворк для API (эта статья 👇)
  3. Пишем API используя FastAPI (скоро)
  4. Пишем API с помощью ChatGPT (скоро)
  5. Инструменты тестирования API (скоро)
  6. Зарабатываем деньги на API (скоро)

Поехали…

Фреймворки для API

В предыдущей статье мы разобрались, что такое API и как это работает, так что теперь давай посмотрим как выбрать лучший фреймворк для API на Python. Чтобы подобрать инструмент, который позволит быстро и эффективно написать API на Python, необходимо учитывать следующие вещи:

  • Размер проекта. Если твой API будет частью полноценного веб-приложения, то лучше выбирать фреймворк, который позволит создать как само веб-приложение, так и его API часть. Если же все, что тебе нужно - это только API, то подойдет и любой из микро фреймворков.

  • Рабочая нагрузка. Обычно это напрямую определяется требованиями к процессорной мощности и объему памяти на сервере. Наиболее очевидным параметром является количество запросов клиент-сервер, которое сможет обработать сервер.

  • Время освоения. Как правило, чем мощее и производительнее фреймворк, тем больше времени требуется на его изучение. Если ты уже хорошо владеешь каким-либо инструментом, то, разумеется, этот параметр можно не принимать во внимание.

Особняком стоит простой случай, когда все что нужно - это клиент для получения данных от уже существующего API. Для его создания вполне может хватить встроенного модуля или любой из популярных библиотек, например, httplib2 или всеми любимой requests. Хоть это и не относится напрямую к теме, но их мы тоже рассмотрим для полноты картины.

Давай теперь посмотрим на лучшие фреймворки для REST API на Python, которые активно поддерживаются и развиваются, а также популярны у разработчиков и широко используются в настоящее время. Для твоего удобства я разделил их на три условных категории:

  • Библиотеки для написания клиента (библиотека клиента)
  • Микро фреймворки (минимальный набор функций)
  • Полнофункциональные фреймворки (full stack).

Начнем с простого…

Библиотеки клиентов

Requests

Сайт: https://github.com/psf/requests

Тип: Библиотека клиента

Requests - это очень популярная клиентская библиотека HTTP в Python. Даже официальная документация Python рекомендует ее. Как следует из её названия, она используется для выполнения запросов к API. Библиотека поддерживает все методы и расширенные возможности HTTP, такие как аутентификация, сессионные куки, работа с SSL и многие другие.

Работать с requests очень просто. Вот пример вызова API в Python, когда используется метод GET для авторизации на сайте:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
>>> import requests
>>> URL = 'https://httpbin.org/basic-auth/user/pass'
>>> r = requests.get(URL, auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
'{"authenticated": true, ...'
>>> r.json()
{'authenticated': True, ...}

Подробную документацию по этой библиотеке смотри здесь.

Faster Than Requests

Сайт: https://github.com/juancarlospaco/faster-than-requests/

Тип: Библиотека клиента

Довольно любопытный пакет, который активно развивается. По заявлениям разработчика работает быстрее, чем Requests :) Возможно это потому, что для разработки используется главным образом язык Nim. Сравнение производительности есть на главной странице репозитория GitHub. Также утверждается, что библиотека намного компактнее по количеству строчек кода.

Самое удобное в этой библиотеке - это множество вспомогательных функций, выходящих за рамки обычных методов HTTP. В ней есть несколько удобных функций для таких задач, как поиск URL-адресов, загрузка ресурсов, например файлов изображений, или объединение запросов к нескольким URL-адресам и возвращение одного ответа.

Вот несколько примеров стандартных запросов API на Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import faster_than_requests as requests

# GET
requests.get("http://httpbin.org/get")

# POST
requests.post("http://httpbin.org/post", "Some Data Here")

# Download a file
requests.download("http://example.com/foo.jpg", "out.jpg")

# Multi-Threaded Web Scraper
requests.scraper(["http://foo.io", "http://bar.io"], threads=True)

# URL-to-SQLite Web Scraper
requests.scraper5("http://foo.io", sqlite_file_path="database.db")

# Regex-powered Web Scraper
requests.scraper6("http://python.org", "(www|http:|https:)+[^s]+[w]")

# CSS Selector Web Scraper
requests.scraper7("http://python.org", "body > div.someclass a#someid")

# WebSockets Binary/Text
requests.websocket_send("ws://echo.websocket.org", "data here")

PycURL

Сайт: http://pycurl.io/

Тип: Библиотека клиента

PycURL - это просто Python надстройка для библиотеки libcurl, которая служит для передачи файлов по различным протоколам. Она поддерживает HTTP, FTP, SMTP и многие другие. Если тебе нравятся библиотеки cURL или libcurl, то возможно тебе придется по вкусу и этот питоновский интерфейс для нативной библиотеки libcurl, написанной на C/C++.

Много интересного ты найдешь в официальном репозитории PycURL на GitHub. Для более подробного ознакомления с библиотекой также почитай официальную документацию.

Ниже пример того, как можно выполнить вызов HTTP GET с помощью PycURL.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import pycurl
from io import BytesIO

buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://pycurl.io/')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()
body = buffer.getvalue()
# Body - это байтовая строка.
# Нужно знать кодировку, чтобы вывести ее в текстовый файл,
# например, в стандартный вывод.
print(body.decode('iso-8859-1'))

urllib3

Сайт: https://urllib3.readthedocs.io/

Тип: Библиотека клиента

Эта библиотека Python имеет специальный класс для управления пулами соединений с поддержкой многопоточнности, загрузкой файлов, форм, обработкой исключений и многое другое. У нее дружественный интерфейс, неплохая документация и даже встроенная поддержка сторонних библиотек.

urllib3 - это мощный и удобный для использования HTTP клиент для Python. Функциональные возможности библиотеки позволяют организовать быструю и надежную работу практически с любыми источниками информации в интернете.

Большая часть экосистемы Python уже пользуется urllib3, так что и ты можешь приглядеться к этой библиотеке.

Примеры вызовов API на Python в библиотеке urllib3:

1
2
3
4
5
6
7
8
9
>>> import urllib3
>>> http = urllib3.PoolManager(num_pools=2)
>>> resp = http.request('GET', 'http://yahoo.com/')
>>> resp = http.request('GET', 'http://google.com/')
>>> resp = http.request('GET', 'http://httpbin.org/robots.txt')
>>> resp.status
200
>>> resp.data
b"User-agent: *\nDisallow: /deny\n"

Микро фреймворки

Flask

Сайт: https://flask.palletsprojects.com/

Тип: Микро фреймворк

Проект начинался как простая обертка вокруг Werkzeug и Jinja, и на сегодняшний день стал одним из самых популярных фреймворков для разработки веб-приложений на Python, включая создание API. Репозиторий проекта на GitHub имеет уже более 60 тысяч звезд. Flask позволяет легко начать, быстро получить первые результаты и постепенно масштабировать твое приложение до любого уровня.

За прошедшие годы Flask пополнился множеством функций, что ставит его практически на один уровень с полностековыми (full stack) фреймворками. Однако именно его минималистичный подход к созданию веб-приложений делает его предпочтительным выбором для многих разработчиков.

Flask предлагает различные варианты достижения цели и не вынуждает использовать специфические библиотеки или следовать строго определенной структуре проектов. Ты можешь сам выбирать инструменты и библиотеки, которые хочешь использовать.

Обратная сторона гибкости

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

Для начала тебе поможет подборка официальных шаблонов. Также обрати внимание на встроенную концепцию Flask под названием Blueprints, которые по сути являются эквивалентом модулей Python во Flask.

Существует множество полезных расширений, разрабатываемых и поддерживаемых сообществом, что облегчает добавление функциональных возможностей в твое приложение.

Вот так можно написать простейшее веб-приложение “Hello World” на Flask:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

Больше информации и документацию Flask ты найдешь на сайте проекта, а список дополнительных ресурсов и плагинов в этом репозитории на GitHub.

Также рекомендую официальный туториал от самого Miguel Grinberg, отличную серию статей на Hackers and Slackers и сообщество пользователей на Reddit.

На русском языке рекомендую перевод официального туториала на Habr.

Tornado

Site: https://www.tornadoweb.org/

Тип: Микро фреймворк

Tornado - это фреймворк и асинхронная сетевая библиотека. Он также включает в себя HTTP сервер и клиентский интерфейс, а также интерфейс WebSocket для двухстороннего взаимодействия с серверами, поддерживающими WebSocket.

Tornado поддерживает все основные функции промежуточного ПО, необходимые для обработки HTTP запросов и ответов, шаблонов и маршрутизации.

В нем также поддерживаются корутины (совместные маршруты), что делает его отличным инструментом для создания бэкендов серверов с длительным циклом получения данных и постоянными соединениями, особенно для WebSockets.

Что такое корутины

Корутины — это облегчённые потоки. Облегчённый поток означает, что он не привязан к нативному потоку, не требует переключения контекста на процессор, и поэтому он быстрее.

Подобно потокам, корутины могут работать параллельно, ждать друг друга и общаться. Самое большое различие заключается в том, что корутины очень дешевые, почти бесплатные: их можно создавать тысячами и платить очень мало с точки зрения производительности. А вот тысяча потоков может стать серьезной проблемой даже для современной машины.

Для чего нужны корутины

  • Для создания асинхронных приложений, которые могут выполнять несколько действий одновременно.
  • Для гибкой и удобной реализации многозадачности.
  • Для большего контроля при переключении между разными задачами. Корутинами управляют разработчик и программа, а не операционная система.
  • Для снижения нагрузки на аппаратные ресурсы устройства.

Корутины поддерживают Kotlin, JavaScript, PHP, C#, Go, Python, Ruby, Lua и другие языки программирования.

Простой бэкенд для API в Tornado можно сделать следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import asyncio
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

async def main():
    app = make_app()
    app.listen(8888)
    await asyncio.Event().wait()

if __name__ == "__main__":
    asyncio.run(main())

Tornado существует уже давно, но некоторые его функции немного устарели по сравнению с современными REST-фреймворками. Тем не менее, он пользуется большой популярностью, поскольку у репозитория на GitHub почти 21 тысяча звезд.

FastAPI

Site: https://fastapi.tiangolo.com/

Тип: Микро фреймворк

FastAPI - это один из новых фреймворков Python. По утверждениям разработчиков, он является очень быстрым, высокопроизводительным и поддерживает компактную структуру кодирования, что приводит к очень быстрой разработке приложений.

FastAPI основан на возможностях asyncio в Python, которые были стандартизированы как спецификация ASGI для создания асинхронных веб-приложений. По своим возможностям FastAPI почти не уступает Flask и поддерживает встроенные процедуры для интеграции с базами данных, выполнения фоновых задач, подключения кастомного промежуточного программного обеспечения и многое другое.

Имея более 50 тысяч звезд у репозитория на GitHub, FastAPI завоевывает всё большую популярность в сообществе Python и постоянно развивается группой активных профессионалов из более чем 100 человек.

Вот как можно создать простой REST API с помощью FastAPI:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

Официальная документация: https://fastapi.tiangolo.com

Репозиторий на GitHub: https://github.com/tiangolo/fastapi

Более подробный пример проекта и отличная дискуссия в комментах здесь.

Sanic

Сайт: https://sanic.dev/en/

Тип: Микро фреймворк

Sanic - это еще один веб-фреймворк Python на основе asyncio. Очень легкий фреймворк с поддержкой всех основных функций HTTP и приложений промежуточного программного обеспечения.

Кроме того, Sanic поддерживает возможность написания пользовательских протоколов и компонентов промежуточного ПО для кастомизации протокола обработки запросов и ответов. Sanic имеет свой собственный встроенный веб-сервер для ускорения разработки, а также хорошо интегрируется с Nginx для промышленных приложений.

Вот как написать простой API на Sanic:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route('/')
async def test(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

Для получения более подробной информации посмотри репозиторий Sanic на GitHub или руководство по началу работы.

Falcon

Сайт: https://falconframework.org/

Тип: Микро фреймворк

Falcon - это простой и надежный фреймворк для создания бэкендов крупномасштабных приложений и микросервисов. Он поддерживает архитектурный стиль REST и работает с серверами, совместимыми с WSGI или ASGI.

Falcon имеет объектно-ориентированный, основанный на классах интерфейс для определения ресурсов API. Он поддерживает основные функции HTTP и приложений промежуточного программного обеспечения, включая обработку протокола HTTP, маршрутизацию, обработку мультимедиа, cookies и утилиты URI.

Вот как создать REST API, используя объектно-ориентированный подход Falcon:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class QuoteResource:
    def on_get(self, req, resp):
        """Handles GET requests"""
        quote = {
            'quote': (
                "I've always been more interested in "
                "the future than in the past."
            ),
            'author': 'Grace Hopper'
        }
        resp.media = quote

api = falcon.API()
api.add_route('/quote', QuoteResource())

Дополнительную информацию найдешь в репозитории Falcon на GitHub. Чтобы начать разработку на Falcon рекомендуется ознакомиться с официальной документацией проекта.

Bottle

Сайт: https://bottlepy.org/

Тип: Микро фреймворк

Bottle - это очень легкий микрофреймворк. Он имеет совсем небольшой объем, распространяется в виде всего одного файла и зависит только от стандартной библиотеки Python.

Bottle отлично подходит для:

  • Быстрого прототипирования идей
  • Изучения того, как создаются фреймворки
  • Создания и запуска простых личных веб-приложений

Вместе с тем Bottle предоставляет все необходимые компоненты для создания полноценного бэкенда для REST API, который опирается на маршрутизацию и шаблоны. Он поддерживает большинство обычных функций, связанных с HTTP, таких как cookies, заголовки, метаданные и загрузка файлов. Также в нем есть встроенный HTTP сервер.

Быстрое и простое приложение на Bottle выглядит следующим образом:

1
2
3
4
5
6
7
from bottle import route, run, template

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Подробную информацию смотри в репозитории Bottle на GitHub. В официальной документации ты найдешь руководство по быстрому старту, конфигурационные тонкости и собрание полезных статей.

Hug

Сайт: https://www.hug.rest/

Тип: Микро фреймворк

нug - это действительно много-интерфейсный API-фреймворк. Он предлагает отличный способ создания REST API, отделяя бизнес-логику API от самого интерфейса, а также ассоциируя зависимости версий.

Поскольку нug ориентирован на создание API, его возможности строго ограничены обработкой ввода/вывода, маршрутизацией и аннотациями типов. Однако он поддерживает возможность добавления расширений.

Одной из интересных особенностей нug является возможность предоставления логики API через CLI, HTTP или локальную функцию, что даёт возможность использовать hug в качестве стандартного модуля Python.

Вот как написать API в hug:

1
2
3
4
5
6
import hug

@hug.get('/happy_birthday')
def happy_birthday(name, age:hug.types.number=1):
    """Says happy birthday to a user"""
    return "Happy {age} Birthday {name}!".format(**locals())

👉 Обрати внимание, что при использовании hug может возникнуть проблема, если тебе необходимо предварительно обрабатывать получаемые запросы. Поскольку тело запроса передается в потоке, то прочитать его можно только один раз.

Поэтому, если прочитать тело запроса в методе, который предварительно обрабатывает запросы, то поток останется пустым и hug не сможет получить входные параметры из него. Проблема решается созданием дополнительного потока перед чтением параметров.

Подробную информацию ты найдешь в репозитории hug на GitHub, а также в официальной документации.

Eve

Сайт: https://python-eve.org/

Тип: Микро фреймворк

Eve - это микрофреймворк для API, построенный на базе Flask. Цель Eve - сделать разработку REST API чрезвычайно быстрой и простой. Поэтому он построен на принципах Flask, оставляя в стороне все компоненты веб-приложений Flask.

Eve поддерживает все наиболее используемые шаблоны интерфейса REST API, такие как CRUD-операции, настраиваемые концевые точки API, фильтрация, сортировка, многостраничность, форматы JSON/XML/JSONP.

Он также поддерживает расширенные возможности, такие как аутентификация, CORS, кэширование, ограничение скорости и многое другое. Eve также поддерживает интеграцию с базами данных MongoDB и SQL.

В Eve для определения ресурсов и конечных точек API может использоваться конфигурационный файл в формате Python. Таким образом, REST API может быть построен с использованием декларативного синтаксиса JSON.

Для более подробной информации прочитай руководство по быстрому запуску Eve или посмотри репозиторий GitHub.

Фулстек фреймворки

Django

Сайт: https://www.djangoproject.com/

Тип: Фулстек фреймворк

Django - это полнофункциональный, полностековый веб-фреймворк на языке Python. Это один из старейших и самых популярных веб-фреймворков, у репозитария которого почти 67 тысяч звезд на GitHub.

Фреймворк Django обладает множеством функций для создания полноценных веб-приложений. Помимо поддержки всего необходимого функционала HTTP, включая приложения промежуточного программного обеспечения, его возможности включают в себя образцы MVC, представления данных, работу с базами данных, формы, шаблоны, безопасность, кэширование и многое другое.

Безусловно, использовать Django только для создания бэкенда REST API - это явный перебор. Поэтому для этих целей можно использовать специальный фреймворк Django REST, который является проектом, поддерживаемым сообществом. Он использует Django в качестве базового движка, предоставляя более простой интерфейс, специфичный для разработки REST API.

Загляни в официальный репозиторий Django и/или официальный репозитарий Django REST, чтобы получить более подробную информацию о работе с ними. А по этой ссылке ты найдешь Руководство по быстрому старту с Django REST.

TurboGears

Сайт: https://turbogears.org/

Тип: Фулстек фреймворк

TurboGears - это еще один полностековый фреймворк. Основная идея при его разработке состояла в том, чтобы дать возможность масштабировать проект от простого приложения (в одном файле) до приложения полного стека. Таким образом, TurboGears может создавать ощущение работы с микрофреймворком, но при этом он предоставляет все необходимые инструменты для разработки полноценного веб-приложения.

TurboGears построен по схеме MVC (Model-View-Controller или “Модель-Представление-Контроллер”), как и другие полнофункциональные фреймворки. Он поддерживает шаблоны, управление страницами, аутентификацию и авторизацию, кэширование, а также поддержку различных баз данных и миграцию схем.

Самый базовый вариант создается очень просто. Сделай файл tgapp.py и объяви в нем контроллер:

1
2
3
4
5
6
7
8
class RootController(TGController):
    @expose()
    def index(self):
        return 'Hello World'

    @expose()
    def hello(self, person):
        return 'Hello %s' % person

Чтобы контроллер работал, нужно создать приложение:

1
2
3
4
5
6
7
8
from tg import MinimalApplicationConfigurator

config = MinimalApplicationConfigurator()
config.update_blueprint({
    'root_controller': RootController()
})

application = config.make_wsgi_app()

И наконец, дать команду на запуск этого приложения:

1
2
3
4
5
from wsgiref.simple_server import make_server

print("Serving on port 8080...")
httpd = make_server('', 8080, application)
httpd.serve_forever()

Потом запускаешь приложение командой python tgapp.py и оно стартанет сервер на порту 8080. Открой браузер, вбей адрес http://localhost:8080 и увидишь свой текст Hello, world.

А если отправишь запрос http://localhost:8080/hello?person=MyName, то увидишь ответ Hello MyName.

Вот и все.

Посмотри репозиторий TurboGears на GitHub, чтобы разобраться лучше с этим фреймворком. А для начала работы изучи документацию TurgoGears.

web2py

Сайт: http://www.web2py.com/

Тип: Фулстек фреймворк

Web2py - это опенсорсный полностековый фреймворк, написанный и программируемый на Python. Его основная цель - это разработка быстрых, масштабируемых и безопасных веб приложений на основе баз данных.

В основе web2py лежат модули для работы с HTTP и URL. Он также имеет встроенный планировщик для выполнения фоновых задач. Кроме того, web2py имеет слой абстракции базы данных, который отображает объекты Python в объекты базы данных, такие как таблицы, запросы и записи.

Уровень абстракции базы данных работает в сочетании с набором драйверов, поддерживающих многие популярные базы данных, такие как SQLite, MySQL, PostgreSQL, Oracle, DB2, MSSQL, MongoDB и другие.

В нем также есть полнофункциональная поддержка MVC, валидация форм, безопасность, контроль доступа и многие другие утилиты.

web2py поставляется в виде бинарных пакетов, который ты запускаешь у себя на компьютере и затем, через веб интерфейс, создаешь свое веб приложение или сервис.

Для детального изучения просмотри репозиторий web2py на GitHub. У проекта также есть отличная документация на разных языках, как официальная, так и созданная сообществом, с примерами и обучающими видео.

Pyramid

Сайт: https://trypyramid.com/

Тип: Фулстек фреймворк

Pyramid - это еще один полнофункциональный веб-фреймворк Python, основная идея которого заключается в том, чтобы начать с малого и по мере необходимости вырасти до большого проекта. Такой подход позволяет разработчикам начать с Pyramid как с микро-фреймворка.

Помимо этого, Pyramid достаточно гибок, чтобы расширяться и добавлять новые компоненты для решения всех задач, необходимых для создания крупномасштабного веб-приложения.

Pyramid включает все стандартные функции веб-фреймворка, такие как схема MVC, маршрутизация, шаблоны, безопасность, сессии, базы данных и протоколирование. Он также имеет встроенный веб-сервер под названием pserve, но без проблем работает с Apache и Nginx для серьезных приложений.

Вот пример простого бэкенда на Pyramid.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response

def hello_world(request):
    return Response('Hello World!')

if __name__ == '__main__':
    with Configurator() as config:
        config.add_route('hello', '/')
        config.add_view(hello_world, route_name='hello')
        app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    server.serve_forever()

Как и в предыдущих случаях, рекомендую ознакомится с репозитарием проекта на GitHub, посмотреть руководство по быстрому старту и почитать официальную документацию Pyramid.

Заключение

Статья получилась довольно объемной и надо понимать, что это всего лишь краткий обзор некоторых наиболее популярных решения для разработки своего API. Ты всегда можешь посмотреть более детальную информацию и выбрать тот продукт, который тебе понравится больше всего, чтобы создать свой уникальный проект.

И поделюсь еще одной ссылкой, на которую полезно заглядывать. Это сравнение производительности многих фреймворков для веб-приложений, выполняющих фундаментальные задачи, такие как сериализация JSON, доступ к базе данных и обработка шаблонов на стороне сервера.

Каждый фреймворк работает в реалистичной конфигурации. Результаты получены на облачных инстансах и на физическом оборудовании. Тестовые реализации в основном созданы сообществом, а все исходные тексты доступны в репозитории GitHub.

В следующей части мы рассмотрим практический пример того, как написать свой API и в дальнейшем правильно его задокументировать.

Успехов! 👍