1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors_Tencent-APIJSON

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Roadmap.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 03:46 f8567b7

APIJSON: планирование и дорожная карта

Новые функции

Часть функциональных описаний можно найти в APIAuto.
Логин: 13000002020, пароль: 123456.
http://apijson.cn/api

Основные принципы
  1. Должны быть соответствующие сценарии использования, нельзя добавлять ложные требования, лучше привести примеры.
  2. Если функцию можно хорошо реализовать с помощью существующих функций, таких как удалённые функции или @raw, то не следует добавлять новую функцию, чтобы избежать дублирования.
  3. Не должно влиять на использование существующих функций, не должно приводить к тому, что существующие функции станут недоступными или более сложными в использовании.

Добавлена поддержка псевдоудаления

20230106 Обновлено: уже поддерживается, спасибо за вклад @cloudAndMonkey.
https://github.com/Tencent/APIJSON/pull/493

Для интернет-проектов данные очень важны, обычно они не удаляются физически, а просто помечаются как удалённые с помощью поля is_deleted и затем фильтруются при CRUD операциях. Эта функция очень важна, её можно реализовать, переопределив SQLConfig.isFakeDelete(), а затем, если true, заменить DELETE на PUT и использовать SQLConfig.onFakeDelete(Map<String, Object> map) для добавления условий:
GET: map.put("deleted", 0)
PUT: map.put("deleted", 0)
DELETE: map.put("deleted", 1)
POST: не используется, не обрабатывается.
Конечно, вы также можете добавить поле deletedTime и т. д.

Также можно добавить поля deletedKey, deletedValue, notDeletedValue в таблице apijson-framework и автоматически настроить, является ли это псевдоудалением, используя StringUtil.isNotEmpty(deletedKey, true), и поместить соответствующее значение ключа.

Добавлена поддержка @having&

20220328 Обновлено: уже поддержано в версии 5.0.0.
https://github.com/Tencent/APIJSON/releases/tag/5.0.0

Используется для реализации внутренних условий AND, ранее использовавшихся @having, которые были заменены на OR, сохраняя при этом правила горизонтального и вертикального соединения.
@having! не является обязательным, его можно реализовать путём инвертирования внутреннего условия, но если реализация проста и не влияет на существующую функциональность, её также можно добавить.

Добавлена поддержка @column!

20210415 Предоставлен плагин поля [apijson-column], поддерживающий сопоставление имён полей и !key для исключения полей.
Эта функция поддерживается только в apijson-framework, необходимо настроить все поля, доступные для каждой версии интерфейса и каждой таблицы, а затем исключить поля @column!.
Можно добавить запись VersionedColumn вместо HashMap для конфигурации кода.
Следует отметить, что во внешнем интерфейсе могут одновременно присутствовать @column и @column!, и в этом случае:
если нет перекрывающихся полей, игнорируйте @column! и используйте только @column;
если есть перекрывающиеся поля, выбросьте исключение и верните код ошибки и сообщение об ошибке.

Добавлена поддержка EXPLAIN в TSQL

20220809 Уже поддерживается Oracle EXPLAIN, спасибо @ifooling за вклад.
https://github.com/Tencent/APIJSON/pull/434

В настоящее время APIJSON поддерживает Oracle, SQL Server и DB2. Однако "@explain": true использует SET STATISTICS PROFILE ON (см. AbstractSQLConfig и AbstrctSQLExecutor). После выполнения результат фактически помещается в ResultSet, анализ производительности помещается в moreResult, поскольку эта проблема в настоящее время делает анализ производительности @explain фактически непригодным для использования в двух вышеупомянутых базах данных, и необходимо изменить способ анализа или решить проблему существующего способа.

Добавлена поддержка начала нумерации страниц с 1

В настоящее время нумерация страниц начинается с 0, но на самом деле 1 более распространена, и пользователи привыкли к ней, а стоимость поддержки невелика. Parser добавляет DEFAULT_QUERY_PAGE и getDefaultQueryPage, аналогично DEFAULT_QUERY_COUNT и getDefaultQueryCount, чтобы упростить передачу значения страницы через параметр и рендеринг значения страницы в info.page. Рекомендуется использовать page в AbstractParser, AbstractSQLConfig, когда используется page, для обеспечения совместимости.

Добавлена распределённая поддержка

"@url": "http://apijson.cn:8080/get"

{
    "User": {
        "@url": "http://apijson.cn:8080/get"  // Пересылка на другие серверы для выполнения
    },
    "[]": {
        "Comment": {
            "userId@": "User/id"
        }
    },
    "@explain": true
}

Необходимо учитывать зависимость порядка выполнения ссылочных присваиваний, поэтому обработка должна быть синхронной и блокирующей. Возможно, можно добавить префикс ~, чтобы указать асинхронность? Например, "@url": "~http://apijson.cn:8080/get", и вызывающая сторона гарантирует, что объект ниже не зависит от него.

Добавлена поддержка Union

Хотя INNER JOIN + условие OR может заменить его функцию, оно не может достичь производительности, которую может обеспечить индекс. Поддержка UNION очень необходима, но UNION ALL практически не требуется, и если реализация проста и не влияет на существующую функцию, её также можно добавить. sys.apijson_user WHERE ( (name REGEXP BINARY 'a') ) UNION SELECT * FROM sys.apijson_user WHERE ( (tag REGESP BINARY 'a') ) LIMIT 10 OFFSET 0


#### Добавление поддержки With
20221126 Обновление: поддержка уже добавлена, спасибо за вклад @cloudAndMonkey <br />
https://github.com/Tencent/APIJSON/pull/481

Может уменьшить количество выполнений подзапросов и повысить производительность.
```js
{   //посмотреть на то, что недавно опубликовали люди, которые подписаны на вас (посты, комментарии)
    "sql@": {
        "with": true,  //создать WITH(SELECT id ...) AS `sql`
        "from": "User",
        "User": {
            "@column": "id",
            "@role": "CONTACT"
        }
    },
    "Moment[]": {
        "Moment": {
            "userId{}@": "sql",
            "@order": "date-"
        }
    },
    "Comment[]": {
        "Comment": {
            "userId{}@": "sql",
            "@order": "date-"
        }
    },
    "@explain": true
}

Сгенерированный SQL:

SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0

и

SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0

Необходимо преобразовать в:

WITH (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) AS `sql`
SELECT * FROM `sys`.`Moment` WHERE ( (`userId` IN `sql` ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0

и

WITH (SELECT `id` FROM `sys`.`User` WHERE `id` IN($contactIdList)) AS `sql`
SELECT * FROM `sys`.`Comment` WHERE ( (`userId` IN `sql` ) ) ORDER BY `date` DESC LIMIT 10 OFFSET 0

Добавление поддержки Case

[Обновление: реализация не требуется, можно использовать синтаксис SQL напрямую и использовать @raw] Реализация SQL-подобного преобразования полей с помощью CASE WHEN в удалённых функциях также неудобна.
Пока не придумали, как это лучше реализовать. Если использовать оригинальный синтаксис SQL, то это будет немного громоздко.

Добавление поддержки одновременного использования id и других полей в качестве условий для операций обновления, удаления и изменения

AbstractVerifier.IS_UPDATE_MUST_HAVE_ID_CONDITION = false
Теперь поддерживается одновременное использование id и других условий для удаления
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L84-L86

Однако, поскольку Operation не имеет AT_LEAST_ONE/ANY_ONE подобных операций,
если настроена только одна конфигурация правила, то можно разрешить только один тип условия (MUST), нельзя использовать только id или другие поля.

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

метод: DELETE

Удаление по id:

tag: Comment-by-id // Конечно, можно написать Comment:id или любое другое название, которое не соответствует формату имени таблицы
structure: ... "MUST":"id" ...

Удаление по дате:

tag: Comment-by-date
structure: ... "MUST":"date" ...

Если вы хотите настроить только одно правило, добавьте AT_LEAST_ONE или ANY_ONE в Operation, а затем настройте:
tag: Comment
structure: ... "AT_LEAST_ONE":"id,date" ... // Необходимо передать хотя бы один из них, нельзя передавать более двух

или

tag: Comment
structure: ... "ANY_ONE":"id,date" ... // Должен быть передан один из них, но не оба

AT_LEAST_ONE и ANY_ONE также могут быть реализованы с использованием расширенного MUST (в настоящее время этот способ кажется лучшим)
"MUST":"id | date,other" — любой из них может быть передан с использованием |, обратите внимание, что слева и справа должно быть по одному пробелу, потому что могут быть "name|$" "id|{" и другие ключи, содержащие "|"
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Operation.java


Также можно установить более сложные выражения:
"MUST":"1:id | date,other" // id, date должны быть переданы, и нельзя передать больше
"MUST":">=2:id | momentId|{} | date>=,other" // id, momentId|{}, date>= должны быть переданы как минимум два
"MUST":"2+:id | momentId|{} | date>=,other" // id, momentId|{}, date>= должны быть переданы минимум два, вместо >= 2, более удобно анализировать и не нужно учитывать >1, != 2 и другие неравенства
"MUST":"2-:id | momentId|{} | date>=,other" // id, momentId|{}, дата>= максимум два могут быть переданы, вместо <= 2

В этом случае нет необходимости добавлять Operation, но AbstractVerifier всё ещё должен обрабатывать REFUSE и MUST, чтобы они не конфликтовали друг с другом
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractVerifier.java#L1012-L1042 image
Источник требований и конкретные обсуждения

https://github.com/Tencent/APIJSON/pull/493#issuecomment-1373376359

... //Добро пожаловать, чтобы дополнить

Усиление безопасности

APIJSON предоставляет различные механизмы безопасности, которые можно добавить или улучшить на основе текущей структуры.

20220504 обновление: добавлен плагин apijson-router, который позволяет контролируемо выставлять простые RESTful интерфейсы в Интернете и выполнять их в виде запросов APIJSON.
https://github.com/APIJSON/apijson-router

Предотвращение несанкционированных операций

В настоящее время существует RBAC для автоматического управления правами доступа.
APIJSONORM предоставляет @MethodAccess аннотацию для настройки
apijson-framework использует [Access Фронтенд, TypeScript фронтенд, маленькие программы для WeChat и т. д.,
Android-клиент, iOS-клиент, C# игровой клиент и др.
Java, C#, PHP, Node, Python и другие серверные демо и данные.
https://github.com/APIJSON/APIJSON-Demo

Расширение

В настоящее время официально доступны два плагина: apijson-column и apijson-router.

1. Библиотеки или фреймворки, основанные на или интегрированные с APIJSONORM или apijson-framework
2. Плагины, расширяющие функциональность APIJSONORM или apijson-framework.

Расширение может быть реализовано через расширение ключевых слов объекта @key, ключевых слов массива key, удалённых функций, перезаписи части методов и т. п.

3. Библиотеки или фреймворки для упаковки или анализа APIJSON на фронтенде или клиенте.

Поскольку APIJSON основан на JSON, в большинстве случаев можно напрямую использовать такие библиотеки или инструменты для упаковки или анализа JSON, как fastjson и другие.
Однако некоторые функции APIJSON требуют использования специальных символов, таких как [] и @, в ключе, что может затруднить анализ при возврате [].
На данный момент можно использовать «format»: true, чтобы сервер форматировал ответ, но это также может привести к некоторым потерям производительности сервера.
Если на фронтенде или клиенте есть соответствующие инструменты форматирования (например, apijson-orm, который можно использовать на Android), выбор будет более разнообразным.

... //Добро пожаловать для дополнения

Продвижение

Написание или публикация блогов, статей или новостей о APIJSON

https://github.com/Tencent/APIJSON#相关推广

Обновление от 05.02.2020: недавно на главной странице были добавлены одна официальная статья и шесть статей, написанных пользователями.
https://github.com/Tencent/APIJSON/blob/master/README.md#相关推广

Регистрация компаний или проектов, использующих APIJSON

https://github.com/Tencent/APIJSON/issues/73

Рекомендация APIJSON в группах социальных технологий, на форумах и т.п.

... //Добро пожаловать для дополнения

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors_Tencent-APIJSON.git
git@api.gitlife.ru:oschina-mirror/mirrors_Tencent-APIJSON.git
oschina-mirror
mirrors_Tencent-APIJSON
mirrors_Tencent-APIJSON
master