Связанное чтение:
Полный сравнительный анализ 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)