2019独角兽企业重金招聘Python工程师标准>>>

既然有人看,那咱就分享一下

API 标准写法

摘抄:http://www.startupcto.com/backend-tech/building-an-api-best-practices

You'll generally want to wrap all your API responses in an 'envelope' which specifies metadata about the APIcall.

// sample JSON envelope
{"status": {"code": 10000,"message": 'Success'},"response": {...results...}
}

Doing this allows for client handler code to behave the same way for all API calls, since it gets a responses back in a universal format.

语义上再好一点,推荐:

// sample JSON envelope
{"status": {"code": 10000,"message": 'Success'},"data": {...results...}
}

可视化编辑校验: http://jsoneditoronline.org/

注意事项

  • json一定要规范,不然ios的json库无法读
  • 如果支持jsonp,自己再加上一个callback就可以了。
  • 状态码说明:code:10000类似的,要以业务或者功能模块来分类,以便debug的时候快速定位
  • 尽量遵守rest

解释一个问题

http://ruby-china.org/topics/15164#reply5

xiaogui 7楼 , 19小时前  喜欢
#5楼 @lytsingsun
先说几点个人建议吧:
1、返回 json 数据,最好外面包一层校验,能让客户端快速知道,这数据合不合法、是否有错;
2、代码复用方面,主要看你项目的实际情况;
3、最好是能给客户端进行充分的沟通,怎么让双方都正规还方便;
4、性能方面,不外乎负载均衡、上缓存、数据库读写分离、代码优化;

第一点:就是说上面返回的status,要有code和message,根据code来判断问题,一般会直接alert出来code:message或者在日志里

这是xiaogui说的外面包一层校验的意思

其他的就没啥需要特殊说明的了

关于http的状态码和api里的status.code说明

http的状态码是直接在request里的,这个一般指服务器的状态,api是假设每一个请求都是200的,在客户端非200的请求统一处理异常,而200的请求,首先解读status获取code是否为0(假设0是请求正确返回),如果是0就读取data,继而完成相应业务逻辑处理。

  • 职责单一,该是server的就是server,该是业务逻辑的就是业务逻辑的
  • 少用http状态码,把http状态码统一封装到一个类,用于处理异常情况(ajax也好,ios的asi或afnetworking也好)
  • 同样可以表示状态的,优先自定的状态码

为什么在response json里没有必要加http status code

每一个request都可以获得状态码,而上面我给出的json是在response里,那么在在http请求完成的时候我们仍然可以获得此request的所有信息

如果仍然在response里加入request里的东西,这样做是重复的,真的是没有必要的,not DRY

换个角度讲,一般我们使用http库的时候要自己封装处理http status code的,尽力减少每个请求的代码,是不可能每个request都去

判断code==200.。。。。。然后。。。。。

技术选项

  • express or koa
  • rails-api
  • grape
  • sinatra
  • go的类似sinatra的框架beego

开发最佳实践

  • api的code和msg可以写一个gem,直接继承到api里
  • api测试和mock,最好是可以先mock出静态的,可以api和mobile端同时开发
  • 根据测试生成api文档

不过我还没有发现好的实现,还请各位指点

api的最佳实践

还是看open api吧

  • http://developer.github.com/v3/
  • 微博API

当。。。。

关联优先

比如获取新闻接口返回数据如下:

{"data": [{"nid": 2,"mid": 1,"text": "this is a test.","images": ["http://121.199.40.172:8086/images/news/12.png","http://121.199.40.172:8086/images/news/13.png",...],"videos": ["http://121.199.40.172:8086/videos/news/12.amr","http://121.199.40.172:8086/videos/news/13.amr",...],"like": 0,"comment": 0,"publish_time": "2013-01-01 12:30:10"},...],"status": {"code": "0","msg": "success"}
}

返回的对象数组,乍看是合适的,但是我们发现1条新闻对应着多个评论,如果评论没有出现在此接口中,我就要发一个新的请求,这样问题就来了,该不该呢?

个人觉得,好的api,如果一次news的数据不是特别多,就应该最新评论,如5条,10条的带上

更新: 使用cors解决跨域问题

使用cors,解决跨域问题,实际中也是这样用,不过app.js里配置的路由还需要更严谨

// 支持跨域
app.use(require('cors')());

一般移动测试都要起一个server,然后访问api服务器的时候就要跨域,这样就可以在移动端浏览器里测试了。

而phonegap打包的时候是本地html所以不用跨域,但是为了测试方便,服务器还是建议加上cors。

  • best-practices-for-a-pragmatic-restful-api

这是去年我在ruby-china发的总结,转过来给大家看看

原文地址:https://ruby-china.org/topics/15173

欢迎关注我的公众号【node全栈】

转载于:https://my.oschina.net/nodeonly/blog/468643

客户端 API 开发总结相关推荐

  1. 生成用于ASP.NET Web API的C#客户端API

    目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...

  2. 谈谈前后端分离实践中如何提升RESTful API开发效率

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取推荐书籍 来源:33h.co/edZR 团队内部RestAPI开发采用设计驱 ...

  3. 【Go API 开发实战 2】RESTful API 介绍

    RESTful API 介绍 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数或者接口,目的是提供应用程序与开发人员基于某软件或硬件得 ...

  4. 【Go API 开发实战 3】API 流程和代码结构

    API 流程和代码结构 为了使读者在开始实战之前对 API 开发有个整体的了解,这里选择了两个流程来介绍: HTTP API 服务器启动流程 HTTP 请求处理流程 本小节也提前给出了程序代码结构图, ...

  5. java api 开发_Java开发人员应该知道的前20个库和API

    java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...

  6. specs.4.8.gz_使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试

    specs.4.8.gz 毫无疑问, JAX-RS是一项杰出的技术. 即将发布的规范JAX-RS 2.0带来了更多的强大功能,尤其是在客户端API方面. 今天的帖子的主题是JAX-RS服务的集成测试. ...

  7. mvvm 后端_ZK实际应用:MVVM –与ZK客户端API一起使用

    mvvm 后端 在以前的文章中,我们已经使用ZK的MVVM实现了以下功能: 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是, ...

  8. 使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试

    毫无疑问, JAX-RS是一项杰出的技术. 即将发布的规范JAX-RS 2.0带来了更多的强大功能,尤其是在客户端API方面. 今天的帖子的主题是JAX-RS服务的集成测试. 有很多出色的测试框架,例 ...

  9. ZK实际应用:MVVM –与ZK客户端API一起使用

    在之前的文章中,我们使用ZK的MVVM实现了以下功能: 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是,我们不直接在cont ...

  10. ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services

    ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services 1. 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文 ...

最新文章

  1. R语言dplyr包nth、first、last函数获取向量特定值实战
  2. element ui 中el-input搜索输入框或者普通输入框无法输入的问题讨论
  3. 免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
  4. Java黑皮书课后题第10章:*10.26(计算器)修改程序清单7-9,接收一个字符串表达式,其中操作符和操作数由0到多个空格隔开
  5. 张善友: .NET社区运营 | 2021 中国开发者生态峰会
  6. .NET 二维码生成(ThoughtWorks.QRCode)
  7. 安卓案例:联选系部与专业
  8. centos6.5 mysql5.6主从复制
  9. linux查看串口端口,规范模式Linux串行端口
  10. python根据index合并_通过index和cols合并/联接/追加两个Pandas数据帧,其中包含多索引列...
  11. 如何在scope图中标注_电机学习笔记: 变压器初级(原边)和次级(副边)的感应电动势、电压方向如何标注?...
  12. python:安装pycaret2.2.3(pytorch版本为1.7.1)
  13. 内部排序的方法实验报告_十大经典排序算法Python版实现(附动图演示)
  14. shell 执行多个python脚本
  15. 从SVN服务器下载project到本地
  16. 计算机语言echo off什么意思,批处理文件的@echo off是什么意思?
  17. 支付微服务设计方案格式模板_开发微商城有哪些常见问题
  18. 房地产类软件实战教程,如何写好房地产类软文
  19. css3中-moz、-ms、-webkit,-o分别代表的意思,以及微信浏览器内核分析
  20. Word无法打开该文件,因为文件格式与文件扩展名不匹配 | 无法从该位置打开扩展名为.asd的文件

热门文章

  1. 计算机版权转让公司,著作权转让
  2. C语言贴图图片路径不对,backgroundImage 路径问题 vue 图片的引入方式
  3. python展示文件_python之文件的读写和文件目录以及文件夹的操作实现代码
  4. 《程序员代码面试指南》第三章 二叉树问题 判断t1树是否包含t2树全部的拓扑结构...
  5. 在C#中使用消息队列RabbitMQ
  6. HSRP热备份路由协议配置详解
  7. [每日一题] OCP1z0-047 :2013-07-27 外部表――不能被DML和建索引...................................16...
  8. ext数据库读取动态添加window组件
  9. docker容器别人访问很卡_一篇文章带你走进Docker的世界
  10. Git - 命令行 - 使用 Tag 标记你的代码