Создание масштабируемых систем: REST-api и микросервисы - страница 8

Шрифт
Интервал



2.4. Маршрутизация и обработка запросов


В предыдущих главах мы рассмотрели основные принципы создания масштабируемых систем и особенности REST-api. Теперь давайте поговорим о том, как маршрутизация обработка запросов могут повлиять на производительность масштабируемость нашей системы.


Маршрутизация: основы


Маршрутизация – это процесс определения того, какая часть системы должна обработать входящий запрос. В REST-api маршрутизация обычно осуществляется с помощью URL-адресов и HTTP-методов. Например, если мы имеем URL-адрес `/users/123`, то может определить, что этот запрос должен быть обработан контроллером, отвечающим за работу пользователями.


Типы маршрутизации


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


Пример статической маршрутизации


Допустим, у нас есть REST-api, который предоставляет информацию о пользователях. Мы можем определить статические маршруты для обработки запросов к этому ресурсу:


```python


from flask import Flask, jsonify


app = Flask(__name__)


Статический маршрут для получения информации о пользователе


@app.route('/users/', methods=['GET'])


def get_user(user_id):


user = User.query.get(user_id)


return jsonify({'name': user.name, 'email': user.email})


if __name__ == '__main__':


app.run()


```


В этом примере мы определяем статический маршрут `/users/`, который обрабатывает GET-запросы и возвращает информацию о пользователе с заданным ID.


Пример динамической маршрутизации


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


```python


from flask import Flask, jsonify


app = Flask(__name__)


Динамический маршрут для получения информации о товаре


@app.route('/products//', methods=['GET'])


def get_product(category, product_id):


product = Product.query.filter_by(category=category, id=product_id).first()


return jsonify({'name': product.name, 'price': product.price})