DevGang
Авторизоваться

RESTful API с помощью Flask

В быстром, постоянно развивающемся мире веб-разработок оптимизация — главное правило. Люди хотят получить бесперебойную работу в Интернете и не торопятся уходить, если не получают желаемого. Использование RESTful API с Flask — это способ, с помощью которого разработчики могут улучшить клиентский опыт, чтобы он соответствовал этим ожиданиям, при этом ничего не теряя на стороне сервера. Сочетание повышенной производительности и масштабируемости - идеальное решение для современной веб-разработки.

Использование RESTful API — это безопасный, надежный и эффективный способ передачи информации через интернет. Некоторые ключевые принципы включают: Единый интерфейс, отсутствие статичности, многоуровневая система, возможность кэширования и код по требованию. Это означает, что клиенты могут получить доступ и использовать ресурс (информацию), необходимый им для выполнения своей задачи, с минимальными перерывами, при этом сохраняя связь с другими авторизованными посредниками.

Если бы мы хотели создать приложение для отслеживания бейсболистов с помощью Flask и RESTful API, мы могли бы начать с использования SQLAlchemy для создания базы данных.

class Player(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    position = db.Column(db.String(100), nullable=False)
    team = db.Column(db.String(100), nullable=False)
    stats = db.relationship('Stat', backref='player')

Теперь у нас есть база данных, которая будет хранить игроков, присваивая им ID, имя, позицию, команду и статистику. Но мы хотим, чтобы каждый игрок отображал свою статистику. Поэтому мы создадим класс stat, в котором будет следующее.

class Stat(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    player_id = db.Column(db.Integer, db.ForeignKey('player.id'), nullable=False)
    games_played = db.Column(db.Integer)
    hits = db.Column(db.Integer)
    home_runs = db.Column(db.Integer)

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

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

@app.route('/players', methods=['GET'])
def get_players():
    players = Player.query.all()
    return jsonify([{'id': player.id, 'name': player.name, 'position': player.position, 'team': player.team} for player in players])

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

@app.route('/players/<int:player_id>', methods=['GET'])
def get_player(player_id):
    player = Player.query.get(player_id)
    if player:
        stats = [{'id': stat.id, 'games_played': stat.games_played, 'hits': stat.hits, 'home_runs': stat.home_runs} for stat in player.stats]
        return jsonify({'id': player.id, 'name': player.name, 'position': player.position, 'team': player.team, 'stats': stats})
    else:
        return jsonify({"error": "Player not found"}), 404

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

@app.route('/players', methods=['POST'])
def create_player():
    data = request.json
    player = Player(name=data['name'], position=data['position'], team=data['team'])
    db.session.add(player)
    db.session.commit()
    return jsonify({'id': player.id, 'name': player.name, 'position': player.position, 'team': player.team}), 201

Отлично! Мы создали нового игрока. Но как нам обновить его статистику? Поздоровайтесь с запросом put.

@app.route('/players/<int:player_id>', methods=['PUT'])
def update_player(player_id):
    player = Player.query.get(player_id)
    if player:
        data = request.json
        player.name = data.get('name', player.name)
        player.position = data.get('position', player.position)
        player.team = data.get('team', player.team)
        db.session.commit()
        return jsonify({'id': player.id, 'name': player.name, 'position': player.position, 'team': player.team})
    else:
        return jsonify({"error": "Player not found"}), 404

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

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

@app.route('/players/<int:player_id>', methods=['DELETE'])
def delete_player(player_id):
    player = Player.query.get(player_id)
    if player:
        db.session.delete(player)
        db.session.commit()
        return '', 204
    else:
        return jsonify({"error": "Player not found"}), 404

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

Благодарю за прочтение!

Источник:

#Flask #Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу