Функции
https://github.com/Tencent/APIJSON/issues/468
JSON поддерживает различные способы определения метода:
"@post", "@put", "@delete", "@head", "@get", "@gets", "@head", "@heads"
"@post": ["Moment","Comment[]"] , значение является форматом массива, каждое значение = ключ
Необходимо гарантировать уникальность каждого ключа:
{
"@post": ["Moment", "Comment:cArray[]", "User:u"], // распределение по POST-запросу соответствующего анализа обработки
"Moment": {
// TODO другие поля
},
"Comment:cArray[]": [
{
// TODO другие поля
}
],
"@get": ["User"], // распределение GET-запроса соответствующей обработки анализа
"User:u": {
// TODO другие поля
},
"Privacy": { // обработка по умолчанию в соответствии с URL (/get, /post и т.д.)
// TODO другие поля
}
}
Для тех, кто не объявляет явный метод операции, используйте URL (/get, /post и т. д.) для обработки по умолчанию.
Определение объекта "@method": "GET", значение в верхнем регистре.
{
"sql@": {
"@method": "GET",
"with": true,
"from": "Sys_role",
"Sys_role": {
"@column": "id",
"role_name": "Роль 1"
}
},
"Sys_user_role:sur[]": {
"@method": "GET",
"Sys_user_role": {
"role_id{}@": "sql"
}
},
"Sys_role_permission:srp[]": {
"@method": "GET",
"Sys_role_permission": {
"role_id{}@": "sql"
}
},
"@explain": true
}
{ "xxx:aa":{ "@tag": "" }}
Правила генерации:
Это только мои настройки для справки, которые будут использоваться в будущем тестировании:
Однократное добавление:
POST User_address {"MUST":"addr","UPDATE": {"@role": "OWNER,ADMIN","childFunTest-()": "childFunTest(addr)"}, "REFUSE": "id"}
Пакетное добавление:
POST User_address[] {"User_address[]": [{"MUST":"addr","REFUSE": "id"}], "UPDATE": {"@role": "OWNER,ADMIN","childFunTest-()": "childFunTest(addr)"}}
Однократное изменение:
PUT User_address {"User_address":{ "MUST":"id","REFUSE": "userId", "UPDATE": {"@role": "OWNER,ADMIN","childFunTest-()": "childFunTest(addr)"}} }
Пакетное изменение:
PUT User_address[] {"User_address[]": [{"MUST": "id","REFUSE": "userId"}], "UPDATE": {"@role": "OWNER,ADMIN"}}
Удаление:
DELETE User_address {"User_address":{ "MUST":"id{}","REFUSE": "!", "INSERT": {"@role": "OWNER,ADMIN"}} }
Формат:
Sys_user_role: сур xxx таблица: псевдоним
Комментарий: cArray []
В то время я ссылался на пример автора: процесс регистрации. Я увидел, что можно обойти проверку, объединив несколько операторов JSON в один, чтобы выполнить пакетную обработку. Поэтому я подумал о том, как реализовать один JSON, который поддерживает различные методы работы и транзакции.
Анализируя исходный код, я познакомился с процессом проверки, процессом анализа и выполнения JSON, процессом генерации SQL-операторов анализа JSON и некоторыми правилами совместимости и проверки.
После обсуждения с автором я очень благодарен автору за предоставленные решения и идеи. Постепенно я понял принципы проектирования и структуру фреймворка apijson.
Один JSON (транзакции) поддерживает добавление, изменение, удаление, запросы и псевдонимы. Идея реализации заключается в следующем:
Анализ JSON для объектов, временных переменных, подзапросов, псевдонимов и тегов.
Добавьте метод к свойствам объекта JSON.
"Sys_role": {
"@method": "PUT",
"id": "6aedce0d-2a29-4fbe-aeed-0ba935ca6b41",
"id{}@": "sql",
"role_code": "code-subrange-4",
"role_name": "роль-поддиапазон-4"
}
Используйте атрибут @method объекта, чтобы заменить метод Parser.
Разделите его с существующим методом, чтобы избежать двусмысленности.
Более подробную информацию см. в: https://github.com/Tencent/APIJSON/issues/468.
Если нет плана выполнения, верните SQL-оператор. Вы можете увидеть JSON-оператор, выполняемый в каждой строке SQL в ответе, чтобы облегчить поиск и устранение неисправностей.
Определите различные сценарии добавления, изменения, удаления и других правил выполнения. Пожалуйста, разделите их по версии.
Таблица запросов основана на тегах, методах и версиях для обеспечения уникальности.
Функция предварительного выполнения может добавлять операторы JSON к
... mysql8 with-as表达式
Предварительные условия:
Необходимо удалить конфигурацию druid wall.
Тестовый случай: запрос одной ссылки range ref
// Тестирование mysql8 with as выражения
// Таблица пользователей
// Таблица ролей пользователей
// Ролевая таблица
// Пример 1: одна ссылка range ref
{
"sql@": {
"@method": "GET",
"with": true,
*from: «Sys_role»,*
"Sys_role": {
"@column": "id",
"role_name": "Роль 1"
}
},
"Sys_user_role:sur[]": {
"@method": "GET",
"Sys_user_role": {
"role_id{}@": "sql"
}
},
"Sys_role_permission:srp[]": {
"@method": "GET",
"Sys_role_permission": {
"role_id{}@": "sql"
}
},
"@explain": true
}
// Второй способ написания
{
"@get": ["sql@","Sys_user_role:sur[]","Sys_role_permission:srp[]"],
"sql@": {
"with": true,
"from": "Sys_role",
"Sys_role": {
"@column": "id",
"role_name": "Роль 1"
}
},
"Sys_user_role:sur[]": {
"Sys_user_role": {
"role_id{}@": "sql"
}
},
"Sys_role_permission:srp[]": {
"Sys_role_permission": {
"role_id{}@": "sql"
}
},
"@explain": true
}
Результат выполнения в mysql8:
Изображение не представлено.
Результат выполнения в mysql5.7:
Изображение не представлено.
Запрос нескольких ссылок range ref
{
"sql@": {
"@method": "GET",
"with": true,
*from: "Sys_role",*
"Sys_role": {
"@column": "id",
"role_name": "Роль 1"
}
},
"sql_user@": {
"@method": "GET",
"with": true,
*from: "Sys_user",*
"Sys_user": {
"@column": "id",
*id: "f0894db2-6940-4d89-a5b2-4405d0ad0c8f"*
}
},
"Sys_user_role:sur[]": {
"@method": "GET",
"Sys_user_role": {
"role_id{}@": "sql",
"user_id{}@": "sql_user"
}
},
"Sys_role_permission:srp[]": {
"@method": "GET",
"Sys_role_permission": {
"role_id{}@": "sql"
}
},
"@explain": true
}
Результат выполнения в mysql8:
Изображение не представлено.
Результат выполнения в mysql5.7:
Изображение не представлено.
Удаление подзапроса
{
"sql@": {
"@method": "GET",
"with": true,
from: "Sys_role_permission",
"Sys_role_permission": {
column: "id",
role_id: ["e7129d5f-b07e-4996-9965-9528e370a393"]
}
},
"Sys_role_permission": {
"@method": "DELETE",
id{}: "sql"
},
explan: true
}
Изображение не представлено.
Выполнение sql-запроса в mysql8:
WITH `sql` AS (SELECT `id` FROM `housekeeping`.`Sys_role_permission` WHERE ( (`role_id` IN ('68877ee9-4cf4-4f32-86e6-16c505ca3b21')) ) ) DELETE FROM `housekeeping`.`Sys_role_permission` WHERE ( (`id` IN ( SELECT * FROM `sql`) ) )
Plain Text
Выполнение запроса в mysql5.7:
DELETE FROM `housekeeping`.`Sys_role_permission` WHERE ( (`id` IN ( SELECT * FROM (SELECT `id` FROM `housekeeping`.`Sys_role_permission` WHERE ( (`role_id` IN ('20d337bb-9886-455f-8dce-f1cadab0ec4f')) ) ) AS `sql`) ) )
Plain Text
Обновление подзапроса
Текст не представлен. ``` { "6aedce0d-2a29-4fbe-aeed-0ba935ca6b41": { "id{}@": "sql", "role_code": "code-subrange-4", "role_name": "角色-subrange-4" }, "@explain": true }
Второй вариант написания: { "@get": ["sql@"], "sql@": { "with": true, "from": "Sys_role_permission", "Sys_role_permission": { "@column": "role_id", "id{}": ["c95ef2d6-bf14-42b0-bb87-038cee8c78f1"] } }, "@put": ["Sys_role"], "Sys_role": { "id": "0bb92d96-8ca6-469e-91e8-60308ce5b835", "id{}@": "sql", "role_code": "code-subrange-4", "role_name": "角色-subrange-4" }, "@explain": true }
Выполнение SQL-запроса в MySQL 8:
Изображение: https://user-images.githubusercontent.com/12228225/204079628-8536b4be-8078-42a5-b3f7-460159372a8a.png
Выполнение запроса в MySQL 5.7:
Изображение: https://user-images.githubusercontent.com/12228225/204079633-df9175bc-703f-4997-95f6-85bbc1134b0b.png
**Получение одной строки данных:**
Будет выполнен процесс проверки.
Запрос:
```http://localhost:8675/lowCodePlatform/forms/api/gets
{
"sql@": {
"with": true,
"from": "Sys_user_role",
"Sys_user_role": {
"@column": "role_id",
"user_id": "4732209c-5785-4827-b532-5092f154fd94"
}
},
"Sys_role[]": {
"Sys_role": {
"id{}@": "sql"
},
"page": 0,
"count": 10,
"query": 2
},
"tag":"Sys_role[]",
"total@": "/Sys_role[]/total",
"@explain": true
}
Второй способ написания:
{
"@gets": ["sql@","Sys_role[]"],
"sql@": {
"with": true,
"from": "Sys_user_role",
"Sys_user_role": {
"@column": "role_id",
"user_id": "4732209c-5785-4827-b532-5092f154fd94"
}
},
"Sys_role[]": {
"Sys_role": {
"id{}@": "sql"
},
"page": 0,
"count": 10,
"query": 2
},
"tag":"Sys_role[]",
"total@": "/Sys_role[]/total",
"@explain": true
}
Доступ и запрос требуют настройки аутентификации:
Изображение: https://user-images.githubusercontent.com/12228225/204079649-510a047b-2b8e-44d2-a32a-f6ea0e7f6a74.png
Выполнение SQL-запроса в MySQL 8:
Изображение: https://user-images.githubusercontent.com/12228225/204079657-6e62872a-2f29-478e-a29b-bcb0a92781a6.png
Выполнение запроса в MySQL 5.7:
Изображение: https://user-images.githubusercontent.com/12228225/204079878-a9885b86-5a44-4ba2-b837-66adc43b07d3.png
Получение нескольких строк данных:
Будет выполнен процесс проверки.
Запрос:
{
"sql@": {
"@method": "GETS",
"with": true,
"from": "Sys_role",
"Sys_role": {
"@column": "id",
"role_name": "超级管理员"
}
},
"sql_user@": {
"@method": "GETS",
"with": true,
"from": "Sys_user",
"Sys_user": {
"@column": "id",
"id": "4732209c-5785-4827-b532-5092f154fd94"
}
},
"Sys_user_role:sur[]": {
"@method": "GETS",
"Sys_user_role": {
"role_id{}@": "sql",
"user_id{}@": "sql_user"
}
},
"Sys_role_permission:srp[]": {
"@method": "GETS",
"Sys_role_permission": {
"role_id{}@": "sql"
}
},
"@explain": true
}
Выполнение SQL-запроса в MySQL 8:
Изображение: https://user-images.githubusercontent.com/12228225/204079892-bc71eb65-cfbd-4c3c-bda9-4b31902058ba.png
Выполнение запроса в MySQL 5.7:
Изображение: https://user-images.githubusercontent.com/12228225/204079897-521a763f-bb08-44af-92c6-5e4117fe9d33.png
Получение количества строк:
Обычный запрос на получение количества, GET и HEAD не выполняют процесс проверки.
Запрос:
{
"sql@": {
"@method": "GET",
"with": true,
"from": "Sys_user_role",
"Sys_user_role": {
"@column": "role_id",
"user_id": "4732209c-5785-4827-b532-5092f154fd94"
}
},
"Sys_role": {
"@method": "head",
"id{}@": "sql"
},
"@explain": true
}
Выполнение SQL-запроса в MySQL 8:
Изображение: https://user-images.githubusercontent.com/12228225/204079903-e397a78a-1849-4678-ac41-0611165a1de1.png
Выполнение запроса в MySQL 5.7:
Изображение: https://user-images.githubusercontent.com/12228225/204079908-1efb5b28-889d-4d9b-b4f9-5092925888c9.png { "sql@": { "with": true, "from": "Sys_role_permission", "Sys_role_permission": { "@column": "id", "role_id{}": ["94f79f0b-331b-4cc5-bfc0-ebfc47d00f13"] } }, "Sys_role_permission": { "@method": "DELETE", "id{}@": "sql" }, "explan": true }
Примечание: в ответе переведён только текст без кода и специальных символов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )