
1 Livid MOD PRO |
2 lhx2008 2018-06-18 16:13:26 +08:00 via Android 有一些后端云服务,其实本质上是 ORM+接口直接下放到前端,面对复杂查询就很麻烦了。安全性,扩展性也不好 |
3 vinsa 2018-06-18 16:30:35 +08:00 MyBatis + SpringBoot |
4 mdluo 2018-06-18 17:21:26 +08:00 via iPhone 1. 后端框架 ORM + 资源型 RESTful 路由 2. Prisma 提供了对 MySQL 和 Postgres 的映射,并自动生成前端可以调用的 GraphQL 接口; 3. 或者前端直接用商业 NoSQL 数据库的 SDK,后台控制好权限,比如 AWS 的 DynamoDB、Firebase 的 FireStore、leancloud 的数据库等 |
5 glacer 2018-06-18 17:25:47 +08:00 GraphQL |
6 29EtwXn6t5wgM3fD 2018-06-18 17:28:30 +08:00 via iPhone sandman2 生成 restful |
7 sammo 2018-06-18 17:44:16 +08:00 via iPhone ruby on rails 的 Active Record |
8 WildCat 2018-06-18 17:53:46 +08:00 |
10 nine99 2018-06-18 20:51:52 +08:00 xmysql |
11 beginor 2018-06-18 22:02:04 +08:00 via Android 去年自己撸了一个类似的,根据需要添加功能,客户用着也觉得挺爽的。 就是把 select where order by 等等 做成 http 参数 , 做好安全性检查 |
12 zhuangzhuang1988 2018-06-18 22:10:58 +08:00 看下这个有没有用 https://postgrest.org/ |
13 qinxi 2018-06-18 22:30:28 +08:00 via Android spring data jpa rest |
15 shilielin 2018-06-18 22:56:08 +08:00 via iPad 可以试一下 flask,自己写一个 API 路由 |
16 SlipStupig 2018-06-18 23:14:33 +08:00 这个不就是 crate.io ? |
17 agagega 2018-06-19 00:45:44 +08:00 Postgrest 了解一下 |
18 congeec 2018-06-19 07:51:55 +08:00 via iPhone Swagger-codegen 支持好几种后端语言,前端框架覆盖更广 顺带 swagger 还能自动生成文档 |
19 yureng 2018-06-19 07:58:30 +08:00 via Android OAata http://odata.github.io |
20 grewer 2018-06-19 09:19:45 +08:00 |
21 ryuzaki113 2018-06-19 15:43:54 +08:00 |
22 TommyLemon 2018-06-26 17:24:11 +08:00 @lhx2008 所以就有了 APIJSON,支持自动化的复杂查询和简单增删改查,通过自动化 权限管理 和 预编译及白名单机制 保证安全性。还有完整的 demo、文档、调试工具和视频教程,欢迎使用^_^ https://github.com/TommyLemon/APIJSON |
23 TommyLemon 2018-06-26 17:32:37 +08:00 推荐 APIJSON, 后端接口和文档自动化,前端(客户端) 定制返回 JSON 的数据和结构。 ### 1.单表查询 ```js { "User": { "sex": 1 } } ``` 自动转换为 ```sql SELECT * FROM User WHERE sex = '1' LIMIT 0, 1 ``` ### 2.数组查询 ```js { "[]": { "count": 10, "page": 1, "User": { "sex": 1 } } } ``` 自动转换为 ```sql SELECT * FROM User WHERE sex = '1' LIMIT 10, 20 ``` ### 3.应用场景示例: #### 获取用户 请求: <pre><code class="language-json">{ "User":{ } } </code></pre> [点击这里测试]( http://apijson.cn:8080/get/{"User":{}}) 返回: <pre><code class="language-json">{ "User":{ "id":38710, "sex":0, "name":"TommyLemon", "tag":"Android&Java", "head":"http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000", "date":1485948110000, "pictureList":[ "http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000", "http://common.cnblogs.com/images/icon_weibo_24.png" ] }, "code":200, "msg":"success" } </code></pre> <br /> #### 获取用户列表 请求: <pre><code class="language-json">{ "[]":{ "count":3, //只要 3 个 "User":{ "@column":"id,name" //只要 id,name 这两个字段 } } } </code></pre> [点击这里测试]( http://apijson.cn:8080/get/{"[]":{"count":3,"User":{"@column":"id,name"}}}) 返回: <pre><code class="language-json">{ "[]":[ { "User":{ "id":38710, "name":"TommyLemon" } }, { "User":{ "id":70793, "name":"Strong" } }, { "User":{ "id":82001, "name":"Android" } } ], "code":200, "msg":"success" } </code></pre> <br /> #### 获取动态及发布者用户 请求: <pre><code class="language-json">{ "Moment":{ }, "User":{ "id@":"Moment/userId" //User.id = Moment.userId } } </code></pre> [点击这里测试]( http://apijson.cn:8080/get/{"Moment":{},"User":{"id@":"Moment%252FuserId"}}) 返回: <pre><code class="language-json">{ "Moment":{ "id":12, "userId":70793, "date":"2017-02-08 16:06:11.0", "content":"1111534034" }, "User":{ "id":70793, "sex":0, "name":"Strong", "tag":"djdj", "head":"http://static.oschina.net/uploads/user/585/1170143_50.jpg?t=1390226446000", "contactIdList":[ 38710, 82002 ], "date":"2017-02-01 19:21:50.0" }, "code":200, "msg":"success" } </code></pre> <br /> #### 获取类似微信朋友圈的动态列表 请求: <pre><code class="language-json">{ "[]":{ //请求一个数组 "page":0, //数组条件 "count":2, "Moment":{ //请求一个名为 Moment 的对象 "content$":"%a%" //对象条件,搜索 content 中包含 a 的动态 }, "User":{ "id@":"/Moment/userId", //User.id = Moment.userId 缺省引用赋值路径,从所处容器的父容器路径开始 "@column":"id,name,head" //指定返回字段 }, "Comment[]":{ //请求一个名为 Comment 的数组,并去除 Comment 包装 "count":2, "Comment":{ "momentId@":"[]/Moment/id" //Comment.momentId = Moment.id 完整引用赋值路径 } } } } </code></pre> [点击这里测试]( http://apijson.cn:8080/get/{"[]":{"page":0,"count":2,"Moment":{"content$":"%2525a%2525"},"User":{"id@":"%252FMoment%252FuserId","@column":"id,name,head"},"Comment[]":{"count":2,"Comment":{"momentId@":"[]%252FMoment%252Fid"}}}}) 返回: <pre><code class="language-json">{ "[]":[ { "Moment":{ "id":15, "userId":70793, "date":1486541171000, "content":"APIJSONisaJSONTransmissionStructureProtocol …", "praiseUserIdList":[ 82055, 82002, 82001 ], "pictureList":[ "http://static.oschina.net/uploads/user/1218/2437072_100.jpg?t=1461076033000", "http://common.cnblogs.com/images/icon_weibo_24.png" ] }, "User":{ "id":70793, "name":"Strong", "head":"http://static.oschina.net/uploads/user/585/1170143_50.jpg?t=1390226446000" }, "Comment[]":[ { "id":176, "toId":166, "userId":38710, "momentId":15, "date":1490444883000, "content":"thank you" }, { "id":1490863469638, "toId":0, "userId":82002, "momentId":15, "date":1490863469000, "content":"Just do it" } ] }, { "Moment":{ "id":58, "userId":90814, "date":1485947671000, "content":"This is a Content...-435", "praiseUserIdList":[ 38710, 82003, 82005, 93793, 82006, 82044, 82001 ], "pictureList":[ "http://static.oschina.net/uploads/img/201604/22172507_aMmH.jpg" ] }, "User":{ "id":90814, "name":7, "head":"http://static.oschina.net/uploads/user/51/102723_50.jpg?t=1449212504000" }, "Comment[]":[ { "id":13, "toId":0, "userId":82005, "momentId":58, "date":1485948050000, "content":"This is a Content...-13" }, { "id":77, "toId":13, "userId":93793, "momentId":58, "date":1485948050000, "content":"This is a Content...-77" } ] } ], "code":200, "msg":"success" } </code></pre> <br /> [在线测试]( http://apijson.org) 创作不易,您的支持是对作者的最大鼓励,右上角点 Star 支持下吧,谢谢 ^_^ |
24 TommyLemon 2018-06-26 17:33:36 +08:00 看样子这回复,既不支持 markdown,也不支持富文本啊 |