После взрыва Facebook/GraphQL всесторонний сравнительный анализ APIJSON (3) — запрос ассоциации таблиц

Node.js JavaScript GraphQL Facebook
После взрыва Facebook/GraphQL всесторонний сравнительный анализ APIJSON (3) — запрос ассоциации таблиц

Связанное чтение:

Полный сравнительный анализ Facebook/GraphQL, APIJSON (1) — основные функции

Полный сравнительный анализ Facebook/GraphQL, APIJSON (2) — контроль разрешений

 

С момента выпуска APIJSON пользователи сети постоянно сравнивают его с GraphQL Facebook.

Есть даже много людей, которые утверждают, что APIJSON «полностью взорвал».

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

APIJSON «закончил» GraphQL!

 

Слоган APIJSON:

Внутренний интерфейс и автоматизация документов, внешняя (клиентская) настройка возвращаемых данных и структуры JSON!

Введение в APIJSON:

APIJSON — это сетевой транспортный протокол JSON для API.
Предоставляет полностью автоматизированный API для простых добавлений, удалений, изменений, сложных запросов и простых транзакционных операций.
Это может значительно снизить затраты на разработку и связь, упростить процесс разработки и сократить цикл разработки.
Он подходит для малых и средних проектов с разделением клиентской и серверной части, особенно для предпринимательских интернет-проектов и проектов для самостоятельного использования предприятиями.

Через API автоматизации интерфейс может настроить любые данные, любую структуру!
Большинству серверных частей HTTP-запросов больше не нужно писать интерфейсы, не говоря уже о документах!
Внешнему интерфейсу больше не нужно сообщать о проблемах интерфейса или документации с серверной частью! Больше никаких ошибок в документации!
Бэкенду больше не нужно писать новую версию интерфейса и документацию для совместимости со старым интерфейсом! Никогда не надоедает интерфейс бесконечно в любое время и в любом месте!

Функции

Онлайн анализ

  • Автоматически генерировать документацию, понятную, удобочитаемую и всегда актуальную
  • Автоматически генерировать код запроса, поддерживать Android и iOS
  • Автоматическое создание файлов JavaBean, загрузка в один клик
  • Автоматическое управление и тестирование вариантов использования интерфейса, обмен в один клик
  • Автоматическая проверка и форматирование JSON, поддержка выделения и расширения

для передней части

  • Нет необходимости отправлять интерфейсы и документы на серверную часть
  • Данные и структура полностью настроены, что вы хотите
  • Смотрите запрос, чтобы узнать результат, что вы просите, то и получаете
  • Получите любые данные, любую структуру сразу
  • Может удалять дубликаты данных, экономить трафик и повышать скорость

для бэкенда

  • Обеспечьте общий интерфейс, большинство API не нужно писать заново
  • Автоматически генерировать документацию, не нужно писать и поддерживать
  • Автоматическая проверка разрешений, автоматическое управление версиями
  • Открытые API не нуждаются в разделении на версии и всегда совместимы.
  • Поддержка добавления, удаления, модификации, поиска, нечеткого поиска, регулярного сопоставления, удаленных функций и т. д.

Демонстрация видео:i.youku.com/apijson

[Следующий Gif-файл выглядит застрявшим, но на самом деле приложение на телефоне работает без сбоев]
   

Домашняя страница проекта:GitHub.com/Томми лимон/…

 

 

После взрыва Facebook/GraphQL всесторонний сравнительный анализ APIJSON (3) — запрос ассоциации таблиц

 

DB-Engines опубликовала свой рейтинг баз данных за июнь 2018 года:

И тенденции их развития по годам:

Очевидно, что Oracle, MySQL и Microsoft SQL Server весь год занимали лидирующие позиции.

И он значительно превосходит другие базы данных, только эти 3 балла выше 1000.

PostgreSQL неуклонно растет в последние годы и поднялся на 4-е место.

У топ-4 самых популярных баз данных прежде всего есть одна общая черта — все они [реляционные базы данных].

 

Как общие проекты с открытым исходным кодом, связанные с HTTP API, APIJSON и GraphQL должны поддерживать реляционные базы данных.

Затем, хотя все они поддерживают, APIJSON «полностью взрывает» GraphQL!

Использование GraphQL для реализации запроса на ассоциацию таблиц сложно и громоздко, но использование APIJSON очень просто и удобно!

 

Реляционные базы данных называются «реляционными» базами данных, потому что они поддерживаютЗапрос ассоциации таблиц.

Например, запросите [вся информация] текущего пользователя и [имя] первых 5 друзей ЦА.

GraphQL выглядит так:

{
  user(id: 82001) {
    id
    sex
    name
    tag
    head
    contactIdList
    pictureList
    friends(first: 5) {
      name
    }
  }
}

 

Возвращаемый результат

{
    "data":{
        "user":{
            "id":82001,
            "sex":0,
            "name":"测试改名",
            "tag":"APIJSON User",
            "head":"https://static.oschina.net/uploads/user/19/39085_50.jpg",
            "contactIdList":[
                38710,
                82002,
                82006,
                82030,
                82025,
                82003,
                93793
            ],
            "pictureList":[
                "http://common.cnblogs.com/images/icon_weibo_24.png"
            ],
            "friends":[
                {
                    "name":"TommyLemon"
                },
                {
                    "name":"Happy~"
                },
                {
                    "name":"Wechat"
                },
                {
                    "name":"Meria"
                },
                {
                    "name":"Tommy"
                }
            ]
        }
    }
}

 

GraphQL 后端怎么知道 user 的类型是 User,friends 的 类型是 User数组 呢?

Потому что бэкэнд использует много кода для написания структуры данных и метода парсинга заранее, то есть Type и Schema:

//声明 GraphQLObjectType 类型,包括字段 fields 和解析函数 resolver
var UserType = new GraphQLObjectType({
  name: 'User',
  fields: () => ({
    name: { type: GraphQLString },
    friends: {
      args: {
        first: { type: GraphQLInt }
      },
      type: new GraphQLList(UserType), //声明 friends 的类型是 User 数组
      resolve: (user, { first }) => { //查 friends 的解析函数
         var ids = user.contactIdList == null ? [] : user.contactIdList.join();
         return ctx.db.findAll(
           'SELECT name FROM User WHERE id IN(' + ids + ') LIMIT ' + first
         ).then(rows => rows.map(row => getUserFromRow(row)));
      }
    }
  })
});

 

//声明结构 Schema,包括 查询结构 Query
export const UserSchema = new GraphQLSchema({
  query: {
    user: {
      type: UserType //声明 me 的类型是 User
      fields: () => ({
        id: { type: new GraphQLNonNull(GraphQLID) },
        sex: { type: GraphQLInt },
        name: { type: GraphQLString },
        tag: { type: GraphQLString },
        head: { type: GraphQLString },
        contactIdList: { type: new GraphQLList(GraphQLID) },
        pictureList: { type: new GraphQLList(GraphQLString) }
      }),
      args: {
        id: { type: new GraphQLNonNull(GraphQLID) }
      },      
      resolve: ({ id }) => { //查 User 的解析函数
        return ctx.db.findOne(
          'SELECT * FROM User WHERE id = ' + id
        ).then(row => getUserFromRow(row));
      }
    }
  }
});

 

以上代码是根据官方代码

https://github.com/graphql/graphql-js/blob/master/src/__tests__/starWarsSchema.js

https://github.com/facebook/dataloader

иapijson.orgПредоставляет тестовые таблицы базы данных для достижения этой цели.

GraphQL настолько сложен и громоздок для использования JavaScript, а использовать языки со статической типизацией, такие как Java и C#, будет в несколько раз хлопотнее!

 


APIJSON выглядит так:

{
  "User": {
    "id": 82001, //查询条件:id = 82001
    "User[]": { //数组,提取里面每一项的 User
      "count": 5, //前 5 条:LIMIT 0, 5
      "User": {
        "id{}@": "User/contactIdList", //在朋友id列表里:id IN contactIdList
        "@column": "name" //只查字段 name: SELECT name
      }
    }
  }
}

 

или поставить пользователяПоместите массив снаружи, чтобы уменьшить уровень вложенности (я не знаю, как реализован GraphQL, если знаете, оставьте комментарий, спасибо)

{
  "User": {
    "id": 82001    
  },
  "User[]": {
    "count": 5,
    "User": {
      "id{}@": "User/contactIdList",
      "@column": "name"
    }
  }
}

 

Каждый объект в массиве User имеет только поле имени.Если вы хотите удалить лишний слой упаковки,

APIJSON может [извлекать поля] (не предоставляется GraphQL)

{
  "User": {
    "id": 82001    
  },
  "User-name[]": { //从数组里面每个 User 里取出 name
    "count": 5,
    "User": {
      "id{}@": "User/contactIdList",
      "@column": "name"
    }
  }
}

 

Приведенная выше информация полностью описывает таблицы, поля, условия запроса, ассоциации таблиц и другую информацию.

 

Бэкенд APIJSON не требует написания кода,

Он будет [полностью автоматически] автоматически анализировать вышеуказанный запрос JSON в операторы SQL.

SELECT * FROM User WHERE id = 82001
SELECT name FROM User WHERE id IN ${contactIdList} -- contactIdList 从上面的 User 取出
然后【自动执行】并返回对应结构的 JSON 结果!

 

Нажмите кнопку [ '/" ] слева, чтобы преобразовать символ массива [] в слово List (в формате JSONResponse.format)

 

Примечание. Приведенные выше запросы APIJSON можно найти вapijson.orgТест на онлайн-инструменте

 

Позднее уведомление:

Полный сравнительный анализ Facebook/GraphQL, APIJSON

——Гибкость структуры данных, безопасность интерфейса, инструменты интерфейса, экология сообщества, языки со статической/строгой типизацией...

 

 

 

Суммировать

Использование GraphQL для реализации запроса на ассоциацию таблиц является сложным и громоздким, и необходимо написать много кода в серверной части, что подвержено ошибкам и затрудняет расширение!

А использовать APIJSON очень просто и удобно, не нужно писать код в бэкенде, полностью автоматический парсинг, никаких затрат на обслуживание!

 

APIJSON, автоматизируйте внутренний интерфейс и документацию, а также настройте данные и структуру JSON, возвращаемые внешним интерфейсом (клиентом)!

Создание не простое, нажмите звездочку в правом верхнем углу, чтобы поддержать его, большое спасибо ^_^

GitHub.com/Томми лимон/… (Java Server, Anroid, iOS, JavaScript)

GitHub.com/healing/API J… (C# .NET Core Server)