Comments (17)
不行 不行 求nodejs实现
from apijson.
@testsla 可以用敏捷开发方式,一开始只做核心功能,其它所有功能都不管。等核心功能实现了再加入其它功能。性能一开始也不考虑,先实现后优化。
APIJSON核心功能是查询,查询的核心功能是 Request转SQL 和 "key@":path引用赋值。对引用赋值的解析是难点,也是APIJSON实现自动化的关键。
只要这两个实现了,其它的功能都比较容易加上。
from apijson.
@TommyLemon 周五吃了老板的鱿鱼,所以没回复。
我正在思考如何实现,不懂之处请教。
from apijson.
@lgh06 GraphQL可不止是要定义Model(官方叫Type)啊,还要针对每个需求定义Schema,才能按照Schema的结构来请求,灵活性仅仅限于字段和成语接龙式的嵌套(A schema里包含B schema,B schema里包含A schema,就可以写成
{
A {
B {
A {
B {
...
}
}
}
}
}
这种,但不能是
{
A {
}
B {
}
}
也不能是
{
A {
}
C {
}
}
等其它任何结构,除非后端再写对应的一大堆Schema。
而且如何查询数据库、如何控制权限还都得后端自己搞定。
APIJSON的开放查询请求不限制结构内容,传任何结构和内容都行,都是APIJSONLibrary这个ORM库完全自动化解析成SQL语句,期间根据@MethodAccess注解配置自动校验权限。
https://www.zhihu.com/question/61648519
1.搜索内容【以…结束】的动态
{
"[]": {
"count": 5,
"page": 0,
"Moment": {
"content$": "%…"
}
}
}
2.搜索内容【以A开始】的动态+【内部】放发布者User
{
"[]": {
"count": 5,
"page": 0,
"Moment": {
"content$": "A%",
"User": {
"id@": "/userId"
}
}
}
}
3.搜索内容【包含A】的动态+【外部】放发布者User
{
"[]": {
"count": 5,
"page": 0,
"Moment": {
"content$": "%A%"
},
"User": {
"id@": "/Moment/userId"
}
}
}
4.每个Moment内比3多了一个评论Comment列表
{
"[]": {
"count": 5,
"page": 0,
"Moment": {
"content$": "%A%"
},
"User": {
"id@": "/Moment/userId"
},
"[]": {
"count": 3,
"Comment": {
"momentId@": "[]/Moment/id"
}
}
}
}
5.将4中的评论列表项Comment去包装(提取一层)
{
"[]": {
"count": 5,
"page": 0,
"Moment": {
"content$": "%A%"
},
"User": {
"id@": "/Moment/userId"
},
"Comment[]": {
"count": 3,
"Comment": {
"momentId@": "[]/Moment/id"
}
}
}
}
6.将5中的User只返回id,sex,name
{
"[]": {
"count": 5,
"page": 0,
"Moment": {
"content$": "%A%"
},
"User": {
"@column": "id,sex,name",
"id@": "/Moment/userId"
},
"Comment[]": {
"count": 3,
"Comment": {
"momentId@": "[]/Moment/id"
}
}
}
}
APIJSON和GraphQL的初步详细对比
https://juejin.im/post/5ae80edd51882567277433cf
from apijson.
@lgh06 @yuu2lee4 另一个 APIJSON Node 版本也出来了,
支持单表、关联、数组、分页查询等,有比较完善的文档,
我测试过,除了项目提供的表有 utf8 编码问题导入不了 (用我自己的表测试可以),其它都可用。
作者是微医的,已经写了不少测试用例,在他公司内部用起来了。
点 Star 鼓励作者继续完善吧 ^_^
https://github.com/kevinaskin/apijson-node
from apijson.
@testsla 太好了,领导说要转node,但现在看来还要过一段时间。你实现一个node版到时候我可以参考下嘿嘿😜
1.解析请求的JSON结构:
1)Parser.parseRequest() 将请求字符串用URLDecoder解码(经测试POST请求不需要转码,我会去掉这个多余的过程),然后还原为对象JSONObject:{}
2)Parser.parseResponse() 整体解析,主要解析数组JSONArray:[],并将对象JSONObject:{}交给ObjectParser解析
3)ObjectParser.parse() 解析对象JSONObject:{}
2.解析请求的JSON内容:
1)ObjectParser.parse() 解析键值对key:value、子对象、子数组等,其中子对象和子数组回调给Parser解析,其它键值对交给SQLConfig解析
2)SQLConfig.newSQLConfig() 解析表对象内容Table:{},getSQL()函数会根据表对象内容生成SQL语句
3.执行SQL语句并返回JSONObject:
1)SQLExecutor.execute() 通过SQLConfig.getSQL()获得SQL语句
2)SQLExecutor.execute() 通过JDBC连接MySQL数据库,执行SQL语句实现增删改查并返回结果,缓存查询结果
4.原路返回结果并用结果替换原来的请求内容
1)SQLExecutor -> ObjectParser -> Parser
from apijson.
@testsla 这样啊,祝你找到满意的工作
from apijson.
@testsla 看看这个,自动生成markdown文档,可展开/收起的带高亮格式化JSON,嘿嘿
http://apijson.org/auto/
from apijson.
@testsla Nodejs现成的SQL builder有 knexjs ,难点在于解析字符串、和APIJSON用同一套规范解析字符串…… 一堆正则 一堆if else等着呢…… 兄弟,搞么?……
from apijson.
@lgh06
看了下knex,它是一个面向对象的ORM库,和Java的Hibernate, C#的Linq原理一样。
// Query both of the rows.
.then(function() {
return knex('users')
.join('accounts', 'users.id', 'accounts.user_id')
.select('users.user_name as user', 'accounts.account_name as account');
})
这种调join,select等函数的静态封装方式都做不了APIJSON的JSON转SQL语句这个功能的。
静态封装意味着得后端根据每个接口去具体地手写代码封装SQL,而APIJSON提倡将前端传的JSON完全自动化生成SQL语句,不需要后端针对接口写具体的解析代码。
APIJSON-Java-Server里的Library也是一个ORM库,它通过SQLConfig来动态封装SQL语句。
https://github.com/TommyLemon/APIJSON/blob/master/APIJSON-Java-Server/APIJSONLibrary/src/main/java/zuo/biao/apijson/server/AbstractSQLConfig.java
from apijson.
不应该把knexjs归类为ORM,而应该归类为 辅助SQL语句生成的 一个库。
用Java来定义Model是第一步,必选项……
我现在是非常懒,不想一个一个去定义model,而graphql要求定义model,所以找了找类似的。
目前来看,参照parse和leancloud,后端使用mongodb吧……
(nodejs是个动态类型的语言,用JSON.parse/JSON.stringify就能在json和对象间转换,没必要学java去定义各种model和字段名…… mongodb也不要求必须定义字段类型…… node还是和mongodb配……)
(其实后端逻辑减少了之后,前端的逻辑会相应增加,各种查询的约束条件、列选择,都写在了前端中…… )
from apijson.
@lgh06 APIJSON目前写model都是为了权限管理,只需要3行代码就能配置一张表的权限。
https://my.oschina.net/tommylemon/blog/889074
如果你不需要自动化的权限控制,可以改下全局配置,那就一行代码都不用写了。
from apijson.
@lgh06 关于前端逻辑增加,这个是定制后端返回的数据内容和结构必然会带来的问题,不过APIJSON提供了一套统一且简单清晰的规范以及丰富的示例:
设计规范
加上APIJSON提倡后端把 测试用例(请求的URL和JSON参数)填好上传到APIJSONAuto接口管理工具
http://apijson.cn/
所以前端直接复制过来就行了。
Android,iOS客户端可以复制右侧自动生成的代码。
用APIJSON,请求代码就不是问题了。
from apijson.
确实牛逼……
在我综合看了
http://apijson.cn/
https://github.com/TommyLemon/APIJSONAuto
优酷的视频 http://i.youku.com/apijson
掘金的文章 https://juejin.im/post/5ae80edd51882567277433cf
本项目README中的链接
本项目中的Document.md
我好像懂了。
建议:
- 没必要写其它语言的后端实现了,维护好Java+MySQL就很牛逼了。
- 将项目中的pages另存为一份ppt?方便一下windows用户……
- 将文档写得详细一些,尤其是和graphql/swagger这种功能有重合、类似的,做对比
- 将文档(wiki、readme.md、document.md、本项目的结构说明、本issue以及其它issue中您贴的博文链接和java文件的作用说明)集中在一个文件中,不要分散在各处。来回跳着看,大神估计可以hold住,小白直接蒙圈了……
- 详细说明 APIJSONAuto项目、apijson.cn的作用,如何配合才能实现自动生成代码,我第一眼看上去其实是懵逼的(没看优酷视频的情况下)
- 将apijson.cn右侧字体适当缩小,或者限制代码块的高度,增加滚动条,方便总览全篇内容,方便copy代码。
- 写明目前服务端只支持Java+MySQL
暂时写这么多。
感谢博主指导。
from apijson.
@lgh06 哈哈,非常感谢。
from apijson.
from apijson.
@yuu2lee4 APIJSON Node 版已经有了,给热心的开发者点 Star 支持下吧 ^_^
https://github.com/TEsTsLA/apijson
from apijson.
Related Issues (20)
- [Lenovo][Fortune 500] The intranet of the biggest PC company Lenovo linked APIJSON
- 【Xiaomi 小米】【500 强】内网部署的飞书内部文档链接了 APIJSON-Demo
- [Xiaomi][Fortune 500] Linked APIJSON-Demo in its official Lark(by ByteDance) website
- [CHINA TELECOM][Fortune 500] China's biggest network provider CHINA TELECOM applied an OpenAPI patent for a low-code platform using APIJSON
- 两张表进行内链查询时,第二张表查询生成的库为默认sys HOT 7
- [Bug]字符 getMethodDefination(method,arguments,type,exceptions,language) 对应的远程函数 getMethodDefination(JSONObject request, String method, String arguments, String type, String exceptions, String language) 不在后端 apijson.demo.DemoFunctionParser 内,也不在父类中!如果需要则先新增对应方法! 请检查函数名和参数数量是否与已定义的函数一致! HOT 1
- [ORACLE] 子查询内部默认添加分页语句,导致in函数无法实现,提示Error Msg = ORA-00913: 值过多的报错 HOT 2
- 【AtlasMap】官网链接了 apijson-column
- [AtlasMap] official website linked apijson-column
- 文档醒目位置没有Getting started,没有说明如何运行这个项目 HOT 1
- [Bug] 达梦数据库做表左关联时提示有歧义的列名[RN] HOT 2
- 【Alibaba 阿里巴巴】【淘天集团】淘宝内网文档链接了 APIJSON
- [Alibaba][Fortune 500] taobao.com internal doc site linked APIJSON
- 希望新增“导出查询结果到excel”的功能 HOT 1
- 查询库表字段信息 HOT 2
- 请求信息中日期/时间的处理方法 HOT 1
- [Bug] 扩展@combine,同一个key在筛选/数据体中可同时存在,两者非互斥逻辑 HOT 4
- 【请教】将查询结果作为远程函数的入参 HOT 2
- [Bug] function校验失败和不允许 UNKNOWN 用户的 GET 请求 HOT 1
- 【问题咨询】响应结果的类型转换
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from apijson.