Платформы PHP/Java/C++ для декларативной привязки SQL к REST API

Какие библиотеки/фреймворки, если таковые имеются, существуют для привязки/«каркаса» реляционных баз данных SQL к RESTful API декларативным образом?

Короче говоря, указав имена таблиц и полей (наряду с правилами и флагами), библиотека/фреймворк сгенерирует RESTful API для доступа/изменения базы данных.

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

Я ищу что-то похожее на это (псевдокод С++) :

context ctx;

// Bind to a MySQL database. Send/receive JSON.
api_binder<mysql, json> ab(ctx);

ab.bind_table("users", "api/users")
    .bind_field<int>("id", flags::readonly | flags::primary_key)
    .bind_field<string>("name")
    .bind_field<unsigned int>("age")
        .on_change([&ctx](auto old_value, auto new_value)
        {
            if(new_value > 0 && new_value < 150)
            {
                return new_value;
            }
            else
            {
                // Reply with an informative message.
                ctx.send_msg("Invalid value for field `age`.");
                return old_value;
            }
        });

Приведенный выше псевдокод может работать так со следующими запросами:

// Request:
GET site.com/api/users

// Response:
[
    {
        "id": 0,
        "name": "Name0",
        "age": 30
    },
    {
        "id": 1,
        "name": "Name1",
        "age": 40
    }
]



// Request:
GET site.com/api/users/by/name?value=Name0

// Response:
[
    {
        "id": 0,
        "name": "Name0",
        "age": 30
    }
]



// Request:
POST site.com/api/users

// Request body:
{
    "name": "Name2",
    "age": 900
}

// Response (error):
{
    "msg": "Invalid value for field `age`."
}



// Request:
POST site.com/api/users

// Request body:
{
    "name": "Name2",
    "age": 90
}

// Response (OK):
{
    "id": 2,
    "name": "Name2",
    "age": 90
}
Ruby on Rails довольно легко подходит под это описание. Когда вы создаете модели (привязки в коде, которые соединяют таблицы SQL с классами), вы можете автоматически создавать маршруты и конечные точки для REST-запросов, которые могут возвращать JSON. Однако это на Ruby, а не на PHP, Java или C++, поэтому я не уверен, что это работает для вас.

Ответы (1)

Взгляните на http://www.bravo-kernel.com/2015/04/how-to-build-a-cakephp-3-rest-api-in-minutes/

Я использовал CakePHP в прошлом, чтобы сделать быстрый и простой графический интерфейс для доступа к БД, но не пробовал часть REST API. Хотя кажется простым в использовании.