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




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


Допустим, у нас есть 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})


if __name__ == '__main__':


app.run()


```


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


Обработка запросов


Обработка запросов – это процесс выполнения действий, необходимых для ответа на запрос. В REST-api обработка обычно осуществляется с помощью контроллеров, которые вызывают необходимые методы действий.


Пример обработки запроса


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


```python


from flask import Flask, jsonify


from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)


app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'


db = SQLAlchemy(app)


class User(db.Model):


id = db.Column(db.Integer, primary_key=True)


name = db.Column(db.String(100), nullable=False)


email = db.Column(db.String(100), nullable=False)


Контроллер для обработки запросов к ресурсу пользователей


class UserController:


def get_user(self, user_id):


user = User.query.get(user_id)


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


def create_user(self, name, email):


user = User(name=name, email=email)


db.session.add(user)


db.session.commit()


return jsonify({'message': 'Пользователь создан'})


if __name__ == '__main__':


app.run()


```


В этом примере мы определяем контроллер `UserController`, который имеет методы для обработки GET-запросов и создания новых пользователей.


Вывод


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


Глава 3. Микросервисы: архитектура и принципы


3.1. Что такое микросервисы?


В предыдущих главах мы обсуждали важность масштабируемости и гибкости в современных системах. Теперь переходим к одному из наиболее интересных перспективных подходов созданию таких систем – микросервисам.