前言

什么是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 学习笔记——简单介绍(一)的更多相关文章

  1. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  2. JMeter学习工具简单介绍

    JMeter学习工具简单介绍   一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...

  3. IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试

    IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试 目的不是为了编写TSC2007驱动,是为了学习IIC驱动的编写,读一下TSC2007的ADC数据进行练习,, Linux主机驱动和外设驱 ...

  4. linux视频学习(简单介绍)20160405

    看一周学会linux系统的学习笔记. 1.linux系统是一个安全性高的开源,免费的多用户多任务的操作系统. 2.linux工作分为linux系统管理员,linux程序员(PC上软件开发,嵌入式开发) ...

  5. 图解HTTP学习笔记——简单的HTTP协议

    简单的HTTP协议 前言 最近在学习Web开发的相关知识,发现<图解HTTP>这本书通俗易懂.所以花时间学习这本书,并记录下学习笔记. 如上图,我们每天都在浏览网页,一般我们都是在浏览器地 ...

  6. flowable学习笔记-简单流程概念介绍

    1 Flowable process engine允许我们创建ProcessEngine 对象和使用 Flowable 的API ProcessEngine是线程安全的,他是通过 ProcessEng ...

  7. JavaScript学习笔记——简单无缝循环滚动展示图片的实现

    今天做了一个简单的无缝循环滚动的实例,这种实例在网页中其实还挺常见的,下面分享一下我的学习收获. 首先,无缝滚动的第一个重点就是——动.关于怎么让页面的元素节点动起来,这就得学明白关于JavaScri ...

  8. elasticsearch学习笔记--原理介绍

    前言:上一篇中我们对ES有了一个比较大概的概念,知道它是什么,干什么用的,今天给大家主要讲一下他的工作原理 介绍:ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户 ...

  9. 学习笔记——SQLite介绍

    简介:Google为android的较大数据的处理提供了SQLlite, 他在数据存储.管理.维护.等各方面都相当出色功能也非常强大. 1.创建数据库 Android 为了让我们能够更加方便地管理数据 ...

随机推荐

  1. Hadoop框架:集群模式下分布式环境搭建

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境配置 1.三台服务 准备三台Centos7服务,基础环境从伪分布式环境克隆过来. 133 hop01,134 hop02,136 ...

  2. mysql笔记--基础知识

    SQL基础 SQL语句的分类: DQL: 数据库查询语句,基本的就是select查询命令,用于查询数据 DML: 数据操纵语句,用于插入,更新,删除数据,即INSERT, UPDATE,DELETE ...

  3. C++(VS2015)模板显式特化之template语法深入理解

    首先说下遇到的情况: 这里在vc++6.0上建立了一个自定义模板类,再去覆盖这个类,分别使用部分覆盖,整体覆盖 但在vs2015上去整体覆盖类会报错. 错误如下: 错误原因:个人感觉是新版本的vs更接 ...

  4. opencv 中从cv::line和resize()函数

    转自: https://blog.csdn.net/weixin_36340947/article/details/77095924 转自: https://blog.csdn.net/robinhj ...

  5. c语言gets函数

    函数gets的原型为:char*gets(char*buffer); 在 stdio.h中定义,如果要程序中用到此函数需包含#include<stdio.h> gets()函数用来从标准输 ...

  6. 记录编译JDK11源码时遇到的两个问题

    执行make all报错信息: 错误一 /src/hotspot/share/runtime/arguments.cpp:1461:35: error: result of comparison ag ...

  7. SQL审核平台Yearning部署

    SQL审核平台Yearning部署  Yearning优势: Yearning SQL 审计平台 基于Vue.js与Django的整套mysql-sql审核平台解决方案.提供基于Inception的S ...

  8. 关于【s】和[t]字符

    [s]:当一个具有执行权限的文件设置 [s](SetUID) 权限后,用户执行这个文件时将以文件所有者的身份执行.passwd 命令具有 SetUID 权限,所有者为 root(Linux 中的命令默 ...

  9. pandas常用方法总结

    In [49]: frame2 Out[49]: year state pop debt one 2000 Ohio 1.5 NaN two 2001 Ohio 1.7 NaN three 2002 ...

  10. 关于pipeline的一篇转载博文https://www.cnblogs.com/midhillzhou/p/5588958.html

    引用自https://www.cnblogs.com/midhillzhou/p/5588958.html 1.pipeline的产生 从一个现象说起,有一家咖啡吧生意特别好,每天来的客人络绎不绝,客 ...