Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用于实现其他语言的 Server 端的 APIJSON 的规范文档能整一个吗 #25

Closed
kikajack opened this issue May 9, 2018 · 16 comments
Labels
Enhancement 增强 增强功能、提高性能等

Comments

@kikajack
Copy link

kikajack commented May 9, 2018

这个 通用文档的 设计规范 部分还是有点简洁了,对于其他语言的 Server 端开发,估计还是需要参考现有的 Java 实现。

@TommyLemon
Copy link
Collaborator

TommyLemon commented May 10, 2018

规范就这么多啊,原理就是将前端传的请求 JSON 转换为 SQL 语句,连接执行后返回 JSON 结果。
目前APIJSONBoot 基于 SpringBoot 做了几个自动化的 API,Controller 接收到请求 JSON 后交给APIJSONORM 这个 ORM 库的 Parser 解析,Parser再通过 SQLConfig 去生成 SQL 语句,最后返回给APIJSONBoot,APIJSONBoot 里的 SQLExecutor 子类再连接数据库执行,最后按原路径返回 JSON 结果。
这是实现原理的比较详细的说明
#6

@TommyLemon
Copy link
Collaborator

NodeJS建议用koa2做中间件,相当于Java的SpringBoot,然后再将JSON转换为SQL语句

@zeromake
Copy link

@TommyLemon 我自己写个一个类似的python的,用的SQLAlchemy通过json生成sql,现在有点烦自己设计规范。要不我把 APIJSON 规范抄了吧。

@TommyLemon
Copy link
Collaborator

@zeromake 可以啊

@zeromake
Copy link

@TommyLemon 看了一下实现规范说明有点杂乱。我现在的规范是抄的 leancloud

@TommyLemon
Copy link
Collaborator

TommyLemon commented May 15, 2018

设计规范 不是实现规范,而是对于达到某种效果的描述哦,具体怎么实现可不管,所以才能不局限于某种语言,目前因为我个人能力和精力问题,所以只实现了Java版的Server。

LeanCloud我很早就看过了,它增强了URL,但很复杂、不直观,用起来挺麻烦的,客户端的Model居然强制继承它的AVObject,不能继承别的或不继承,请求强制用它的AVQuery等类,非常不友好。

APIJSON协议的核心就是 引用赋值 ,它是实现对象之间关系描述的功能,对于MySQL,Oracle,MSSQL Server等关系型数据库非常适用,也是最难实现的部分。其它功能都是SQL语法用key:value表示的简单对应描述,实现也比较简单。

APIJSON的实现原理请参考
#6

如果你开发出来,我可以帮你推广下^_^

@zeromake
Copy link

@TommyLemon 我不是说实现方式我是指,http的请求数据,如json的body对象转换为某种抽象的操作。

比如查询一个有条件过滤的表

# 查询id不等于1的列表
curl /user?where={"id": {"opt": "$ne", "val": 1}}
{
    "status": 200,
    "message": "ok",
    "data": [
        {
            "id": 2,
            "name": "test2"
        },
        ...
    ]
}

以上的各种过滤表达式的说明。
=, !=, >,<, IN, NOT IN, LIKE之类的
还有批量操作也没看到请求该如何构建,比如批量修改。
大概就是指 sql 的对应到 http 上的请求的构建格式。

@TommyLemon
Copy link
Collaborator

TommyLemon commented May 20, 2018

@zeromake 都支持啊,
http://apijson.cn:8080/get

{
    "User[]": {
        "count": 10, // LIMIT 0, 10
        "User": { // FROM User
            "@column": "id,name", // SELECT id,name
            "name": "APIJSONUser", // WHERE name = 'APIJSONUser'
            "name$": "A%", // WHERE name LIKE 'A%'
            "id!": 38710, // WHERE id !=  '38710'
            "id{}": [  // WHERE id IN  ('1490109742863', '1490109845208', '1490420651686', '1493748615711')
                1490109742863,
                1490109845208,
                1490420651686,
                1493748615711
            ],
            "id!{}": [  // WHERE id NOT IN  ('1490584952968', '1492936169722')
                1490584952968,
                1492936169722
            ]
        }
    }
}

返回:

{
    "User[]": [
        {
            "id": 1490109742863,
            "name": "APIJSONUser"
        },
        {
            "id": 1490109845208,
            "name": "APIJSONUser"
        },
        {
            "id": 1490420651686,
            "name": "APIJSONUser"
        },
        {
            "id": 1493748615711,
            "name": "APIJSONUser"
        }
    ],
    "code": 200,
    "msg": "success"
}

具体看通用文档中的 功能符

Java版的实现参考 AbstractSQLConfig

批量删改需要传 id{}:[] , tag一般是 Comemnt[] 这种带数组符号的 , 请参考文中的批量操作 后端开挂:3行代码写出8个接口!

@TommyLemon
Copy link
Collaborator

@zeromake
apijson_function

@zeromake
Copy link

@TommyLemon 我考虑下,研究套json api对应抽象数据库操作的说明,再考虑实现,我现在的用的是 leancloud 的规范,要改成 APIJSON 也不难。好像没有看到 OR, AND 的对照 json 表现模式?

@TommyLemon
Copy link
Collaborator

@zeromake APIJSON 不是 JSON API哦。
OR - | 或不写
AND - &
NOT - !
见功能符中的 逻辑运算

@zeromake
Copy link

@TommyLemon 我说的 JSON API 是指各种数据库操作(APIJSON, leancloud)自动化转 json api 的各种规范的比较与说明。

@TommyLemon
Copy link
Collaborator

@zeromake 好吧,上图就是了

@mlick
Copy link

mlick commented Jun 7, 2018

就是想进来说下,很腻害!

@TommyLemon
Copy link
Collaborator

@mlick 哈哈,感谢支持

@TommyLemon TommyLemon added the Enhancement 增强 增强功能、提高性能等 label Jun 19, 2018
@TommyLemon
Copy link
Collaborator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement 增强 增强功能、提高性能等
Projects
None yet
Development

No branches or pull requests

4 participants