Restful API базы данных: как описать структуру таблицы - PullRequest
1 голос
/ 26 мая 2020

В настоящее время я работаю над приложением javascript (на основе реакции), которое в основном отображает данные из некоторых таблиц базы данных и позволяет добавлять, удалять и обновлять данные из таблиц. Я реализовал службы для доступа к базе данных с помощью Flask и SQLAlchemy, пытаясь следовать спецификации REST (больше как ориентир, чем «догма», поскольку я не делюсь своим API через inte rnet).

Я хочу реализовать веб-сервис, который описывает каждую таблицу: возьмем таблицу ниже

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

Я хочу такую ​​вещь:

GET / user / description

Ответ: что-то вроде

[
{column_name: 'id', type: 'int'  , p_key: 'True'},
{column_name: 'username', type: 'string'},
{column_name: 'email', type: 'string'}
]

(плюс другие полезные метаданные для клиента, желающего вставить или обновить данные)

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

1 Ответ

0 голосов
/ 26 мая 2020

Хорошо, сначала вам нужен индикатор, поэтому вам нужно проверить, что клиент хочет просмотреть (например, первый пользователь, поэтому id = 0/1), отправить запрос ajax, например, или форму, или что-то еще. хотите по этому пути:

@app.route("/user/description", methods=[...])

Теперь вам нужно отфильтровать данные по полученному идентификатору, чтобы

username = User.query.filter(User.id).all()[0].username # etc

получить тип username, выполнив type(username) и поместив все эти данные в dict для отправки ответа JSON (сделайте то, что я только что показал вам для каждого столбца). Если вы хотите узнать, есть ли у столбца первичный ключ, я предлагаю вам посмотреть этот вопрос :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...