RestfulApi 学习笔记——简单介绍(一)
前言
什么是restapi?
直接看:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
阮一峰的blog,即可明白,下面是一些例子,增强理解。
正文
例子一 资源链是箱子
比如说我们要得到某个用户,我们可能这样写:api/getusers
这样就不符合了,因为操作动作让请求方式替代。
比如说get 请求就表示是获取users,那么就不需要写get,那么可以这样写:api/getusers 然后get请求。
这个怎么说呢?也就是说把资源链当做资源链,而不是语义,说简单点就是资源链指向的是某个资源,而不是某个操作。
那么如果获取方式不同怎么写呢?比如说查询按照某个字段从小到大排序,那么应该如何写呢?我们需要明白查询从小到大排序是条件,而不是动作。
那么可以作为参数来传递api/getusers?orderby='xxx'
例子二 给箱子取一个好的名字
api/users 那么你能写成api/u,因为这样不具备语义化
例子三 不要给箱子定义多个名字
比如说我们获取到多个用户,那么我就使用api/users,然后我获取某个用户我就去获取api/user/1。
这样其实是没有必要的,api/users 表示的就是users 这个资源箱。使用api/user/1 从新给箱子又改了一个名字,我觉得这样难以维护,
而且这样做,不能体现这是一条资源链,因为user 并不能表示这个资源箱的名字,而是一个复数,是一个集合来表示。
例子四 给箱子里面套箱子,结构化
比如说查询某家公司下面的某个员工?
/api/employees/1 这样写似乎没有什么问题,但是呢?这样写还是存在某些问题的,因为这样没有体现好资源结构。
如果这样写是不是更好,/api/companies/1/employees/1,这样写是否更好一点?这样在api层面暴露出了更多的信息,比如说知道了员工是在某个公司下面。
这样体现了一个很好的结构性。

例子五 不要让restful作为约束
比如说我们可能看到这样的api,/api/users/allcount,这样写是不符合restful api的,表示获取users的数量,因为这不能把allcount 作为一个箱子,因为他的来源于users,users才是一个资源箱。
那么这样写是否正确呢?当然是不符合的了,但是有存在的合理性。因为如果这样写/api/users?search='allcount',这样写当然也是错误的了,因为/api/users获取的是users资源,得到的结果却是一个数量,
而且这样写让我们的代码混乱不堪。当然我们也可以提取出去,/api/statistics?name='users'&&result='allcount',这样写也会混乱不堪。那么就把这个当做一个箱子的特殊的孔,其合理性也很高。
所以说不能把restful完全作为一种不可抵触的东西,主要是看这个资源箱的结构是怎么样的。就像这个例子一样,在这个api接口资源库中,在users打个孔,真的没啥的,就跟一个机箱一样,里面存着一些外设
usb接口,如果没有这些接口的话,那么其扩展性太差了。
结
简单的做个介绍,后续持续不断更新。
RestfulApi 学习笔记——简单介绍(一)的更多相关文章
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- JMeter学习工具简单介绍
JMeter学习工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...
- IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试
IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试 目的不是为了编写TSC2007驱动,是为了学习IIC驱动的编写,读一下TSC2007的ADC数据进行练习,, Linux主机驱动和外设驱 ...
- linux视频学习(简单介绍)20160405
看一周学会linux系统的学习笔记. 1.linux系统是一个安全性高的开源,免费的多用户多任务的操作系统. 2.linux工作分为linux系统管理员,linux程序员(PC上软件开发,嵌入式开发) ...
- 图解HTTP学习笔记——简单的HTTP协议
简单的HTTP协议 前言 最近在学习Web开发的相关知识,发现<图解HTTP>这本书通俗易懂.所以花时间学习这本书,并记录下学习笔记. 如上图,我们每天都在浏览网页,一般我们都是在浏览器地 ...
- flowable学习笔记-简单流程概念介绍
1 Flowable process engine允许我们创建ProcessEngine 对象和使用 Flowable 的API ProcessEngine是线程安全的,他是通过 ProcessEng ...
- JavaScript学习笔记——简单无缝循环滚动展示图片的实现
今天做了一个简单的无缝循环滚动的实例,这种实例在网页中其实还挺常见的,下面分享一下我的学习收获. 首先,无缝滚动的第一个重点就是——动.关于怎么让页面的元素节点动起来,这就得学明白关于JavaScri ...
- elasticsearch学习笔记--原理介绍
前言:上一篇中我们对ES有了一个比较大概的概念,知道它是什么,干什么用的,今天给大家主要讲一下他的工作原理 介绍:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户 ...
- 学习笔记——SQLite介绍
简介:Google为android的较大数据的处理提供了SQLlite, 他在数据存储.管理.维护.等各方面都相当出色功能也非常强大. 1.创建数据库 Android 为了让我们能够更加方便地管理数据 ...
随机推荐
- 消息队列MQ面试专题(rabbitmq)
正文: 1.什么是 rabbitmq 采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦 2.为什么要使用 rabbitmq 在分布 ...
- spark 笔记2
一.Spark Shuffle 的发展 Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为Hash Based Shuffle引入File Consolidat ...
- Maven依赖管理之BOM
目录 什么是BOM 一个BOM的格式 怎么使用BOM 通过parent引用 通过dependencyManagement引用 怎么查看依赖的某个BOM的具体清单 版本冲突时的一些规则 何为依赖调节 参 ...
- VS2017 Xamarin开发Android时首次部署完成后直接闪退
项目属性切换到Android选项,在打包属性上有一个[使用共享运行时]的选项要取消勾选,默认打钩时apk文件比较小,但程序无法运行起来. 取消后安装包一小变成几十M,这个目前好像没什么好的解决办法,毕 ...
- Spring Cloud系列(二):Eureka应用详解
一.注册中心 1.注册中心演变过程 2.注册中心必备功能 ① 服务的上线 ② 服务的下线 ③ 服务的剔除 ④ 服务的查询 ⑤ 注册中心HA ⑥ 注册中心节点数据同步 ⑦ 服务信息的存储,比如mysql ...
- 在C++中使用libuv时对回调的处理
新的解决方法 https://www.cnblogs.com/ink19/p/13768425.html libuv简介 libuv是一个可以跨平台的C语言库,它提供了基于事件的异步IO支持[1].提 ...
- 星涛:采用java递归复制文件夹
package com.botao; import java.io.*; /** * @author cbt28 */ public class FileUtil { public static St ...
- 04 sublime text 3在线安装package control插件,之后安装主题插件和ConvertToUTF8 插件
前提:需要@@科学@@上网 在线安装包通常都需要@@科学@@上网 安装package control插件 在线安装package control插件 按ctrl+shift+p 输入install,选 ...
- 更改MySQL 5.7的数据库的存储位置
操作系统:Windows 10 x64 MySQL安装包版本:mysql-installer-community-5.7.17.0 参考:MySQL 5.7版本的安装使用详细教程+更改数据库data的 ...
- Docker笔记1:Docker 的介绍
目 录 1.Docker 简介 2.Docker 特性 3.Docker 应用场景 4.Docker 优点 1.Docker 简介 Docker 提供了一个可以运行你的应用程序的封套(env ...