Использование Python Rest API

Python

Использование Python Rest API

Фото:Douglas LopesonUnsplash

В этом посте я расскажу о том, как создать простой сервер и несколько клиентов/устройств, которые взаимодействуют с помощью остальных вызовов.

В качестве базы данных мы будем использовать Python, Flask и SQLALCHEMY.

Идея состоит в том, чтобы иметь один сервер для сбора информации, генерируемой несколькими устройствами.

сервер

Во-первых, мы начнем с реализации сервера, используя SQLALCHEMY для сохранения данных.

from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
api = Api(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)

Давайте создадим две таблицы, одна из которых называется «устройства», а другая — «данные», которые связаны друг с другом.

Таблицы определяются путем создания классов для их представления.

class Device(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    status = db.Column(db.Boolean, nullable=False)
    config = db.Column(db.Integer, nullable=False)
    data = db.relationship('Data', backref='device', lazy=True, cascade="all, delete-orphan")
class Data(db.Model):
    id_device = db.Column(db.Integer, db.ForeignKey('device.id'), primary_key=True)
    timestamp = db.Column(db.Float, primary_key=True)
    data = db.Column(db.Float, nullable=False)
def __repr__(self):
    return f"Data(id_device = {self.id_device}, timestamp = {self.timestamp}, data = {self.data})"

Теперь мы можем определить управление данными, которые будут поступать с устройства, и определить API Rest.

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

device_data_put_args = reqparse.RequestParser()
device_data_put_args.add_argument("id_device", type=int, help="id device", required=True)
device_data_put_args.add_argument("timestamp", type=float, help="timestamp epoc", required=True)
device_data_put_args.add_argument("data", type=float, help="data", required=True)

В этом случае JSON будет состоять из 3 параметров (id_device, timestamp, data).

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

Вы также можете определить другие методы, кроме PUT.

  • GET- Используется для получения указанного ресурса
  • POST- используется для создания новых данных на указанном ресурсе
  • PUT- Используется для создания новых данных или замены существующих данных на указанном ресурсе.
  • PATCH- Используется для создания новых данных или обновления/изменения существующих данных на указанном ресурсе.
  • DELETE- Используется для удаления существующих данных для указанного ресурса.

Теперь давайте свяжем этот класс с URL-адресом, связанным с вызовом.

api.add_resource(DataDevice, "/data_device")

Если вы хотите передать параметры непосредственно в URL-адрес, вы должны объявить тип переменной и связанное с ней имя, которое будет достигнуто.

api.add_resource(ConfigUpdate, "/config_update/<int:id_device>")

Далее, при определении методов, обрабатывающих вызовы, у них будет два параметра, как здесь.

def patch(self, id_device):

клиент

Передача данных клиент/устройство очень проста.

try:    resp = requests.put(BASE_SERVER + 'data_device', json=send_data)    resp.raise_for_status()except HTTPError as http_err:    logging.warning(f'HTTP error occurred: {http_err}')    return respexcept Exception as err:    logging.warning(f'Other error occurred: {err}')    returnelse:    if resp.status_code == 201:        # update configuration        self.config = resp.json()

визуализация данных

Кроме того, я добавил веб-страницу для визуализации данных.

Изображение предоставлено автором

который можно посмотретьhttp://127.0.0.1:5000

Ниже репозиторий, который я оставил.

Для запуска сервера.

python3 server.py

Чтобы запустить устройство, добавьте идентификатор в python3 device.py.

python3 device.py 1python3 device.py 2

GitHub - pietrocolombo/example_api_rest_python

Внесите свой вклад в разработку pietrocolombo/example_api_rest_python, создав учетную запись на GitHub.

github.com

(GitHub.com/Пьетро кол ОМ…)