当前位置: 首页 > news >正文

RESTful接口设计原则和优点

RESTful架构优点:

  1. 前后端分离,减少流量
  2. 安全问题集中在接口上,由于接受json格式,防止了注入型等安全问题
  3. 前端无关化,后端只负责数据处理,前端表现方式可以是任何前端语言(android,ios,html5)
  4. 前端和后端人员更加专注于各自开发,只需接口文档便可完成前后端交互,无需过多相互了解
  5. 服务器性能优化:由于前端是静态页面,通过nginx便可获取,服务器主要压力放在了接口上

RESTful架构设计原则(不同公司具体细节可能不同):

  1. 在接口命名时应该用名词,不应该用动词,因为通过接口操作到是资源。
  2. 在url中加入版本号,利于版本迭代管理更加直观
    https://www.rgc.com/v1/
  3. 对于资源的操作类型应该是通过http动词表示。
    • GET /zoos:列出所有动物园
    • POST /zoos:新建一个动物园
    • GET /zoos/ID:获取某个指定动物园的信息
    • PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
    • DELETE /zoos/ID:删除某个动物园
    • GET /zoos/ID/animals:列出某个指定动物园的所有动物
    • DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
  4. 排序规则:默认时升序,‘-’为降序;多个排序规则时以逗号间隔组合。使用sort查询参数限制
    GET /tickets?sort=-time,created_at 
    优先以time倒序显示,其次以created_at正序显示
  5. 限制返回值的字段域:明确指定输出字段列表,用于控制网络带宽和速度。使用fields查询参数来限制。
    GET /tickets?fileds=id,subject,customer_name,time&sort=-time
    返回参数列表为id,subject,customer_name,time,并且以time字段倒序显
  6. HTTP Method分别对于资源的CURD操作
    GET(SELECT):从服务器取出资源(一项或多项)。
    POST(CREATE):在服务器新建一个资源。
    PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
    PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
    DELETE(DELETE):从服务器删除资源。

    保证 POST,PUT,DELETE,PATCH,GET 操作幂等性。

  7. 使用SSL(Secure Sockets Layer 安全套接层)
  8. 参数和url采用蛇行命名方式。如:updated_time
  9. 服务器请求和返回的数据格式,应该尽量使用JSON,避免使用XML。在 request中的Accept和Response中的Content-Type:application/json

 

总结:优秀的RESTful接口设计,能够根据请求的路径及请求方法就能看出这个接口主要是对具体某个资源进行什么方法的操作以及返回数据的规则等等。

 

参考资料:

http://blog.csdn.net/jielysong117/article/details/68948972

http://www.runoob.com/w3cnote/restful-architecture.html

转载于:https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_617days.html

相关文章:

  • Django 博客开发教程 16 - 统计文章阅读量
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • maven编译的时候排除junit测试类
  • TortioseSVN切换账号教程
  • PHP变量
  • Jenkins进阶系列之——04Publish Over FTP Plugin插件
  • HashMap的长度为什么要是2的n次方
  • mysql主从复制配置过程及演示
  • [坑]解决Spring利用注解@Value获取properties属性为null或@Autowired 注解为null
  • 如何让git小乌龟工具TortoiseGit记住你的账号密码
  • POJ3013 Big Christmas Tree
  • 飘逸的python - 实现一个极简的优先队列
  • Linux常用查找命令
  • 留存- angularjs 弹出框 $modal
  • 矩阵相乘,向量相乘,矩阵向量相乘
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 230. Kth Smallest Element in a BST
  • centos安装java运行环境jdk+tomcat
  • Intervention/image 图片处理扩展包的安装和使用
  • mysql常用命令汇总
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpringBoot几种定时任务的实现方式
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 聚类分析——Kmeans
  • 力扣(LeetCode)22
  • 每天一个设计模式之命令模式
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • hi-nginx-1.3.4编译安装
  • 大数据全解:定义、价值及挑战
  • 积累各种好的链接
  • 交换综合实验一
  • ​520就是要宠粉,你的心头书我买单
  • ​Java并发新构件之Exchanger
  • # 数论-逆元
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4)logging(日志模块)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (ZT)出版业改革:该死的死,该生的生
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二)springcloud实战之config配置中心
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (过滤器)Filter和(监听器)listener
  • (一)基于IDEA的JAVA基础12
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET DataGridView数据绑定说明
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net中应用SQL缓存(实例使用)
  • [C# 网络编程系列]专题六:UDP编程