REST API从木愣到够呆
目前准备写一个API服务,遵循REST规范,因为自己也是第一次接触这玩意,所以就以自我的认知和理解过程来记录,留爪.
##在REST里什么叫资源?
拿数据表为例:
现在有三张表:(此表非彼婊)
- schools #学校表
- students #学生表
- teachers #教师表
这些表对应的是一个个数据集,在REST里这些集合个体就叫做资源.
*Tips:*资源对应的是一个集合,那么我们在命名的时候最好用名词+复数形式来表达.
*Tips:*表结构和资源非常像,所以很多人会直接把资源名和表名强制对等(应该视情况而定).
##在REST里什么叫资源操作?
对于表数据的操作不外乎CRUD:
C=Create=新建R=Read=读取U=Update=更新/修改/替换D=Delete=删除
对应的对资源的操作也就是CRUD,
同时HTTP协议本身也有对应的CRUD方法:
POST=新建Get=读取Put=更新/修改/替换Delete=删除
当然,一般我们只用到Get和Post这2种,
而REST是基于HTTP协议的,那么本着有便宜不占白不占的准则,于是在REST里对资源的操作叫做Post/Get/Put/Delete.
##在REST里如何实现对资源的操作?
既然REST是基于HTTP协议来实现来,那么自然而然我们要实现的就是一个HTTP API,也就是实现一个URI,
以操作资源students为例:
(Get)/students=读取所有学校数据(Post)/students=新建学校数据(Put)/students=修改学校数据(Delete)/students=删除学校数据
那么怎么实现对资源中某项数据的操作呢?
(Get)/students/:id=读取编号为id的学校数据(Post)/students/:id=新建一个编号为id的学校数据(Put)/students/:id=修改编号为id的学校数据(Delete)/students/:id=删除编号为id的学校数据
*Tips:*资源对应表结构的话,id其实可以是表的主键.
##在REST里如何确认返回的数据格式及字符集?
HTTP中常见的交互数据格式有json & xml & html & rss等等,常见的编码有utf-8 & gbk等等.
- 一种做法是在请求参数当中添加
format参数来告诉服务端我需要什么格式的数据,如:
/students?format=xml&charset=utf-8/students?format=json&charset=gbk
这样相对肉眼直观,但是会多占用2个参数,并且format参数别名大家并不统一,可能有写人叫format,有些人叫dataType等等,charset类似.
- 还有一种做法是在
HTTP的请求头中来告诉服务端我需要什么格式的数据及字符集,如:
http.setHeader("Content-Type", "text/html; charset=utf-8")http.setHeader("Content-Type", "text/json; charset=utf-8")http.setHeader("Content-Type", "text/xml; charset=gbk")
这样相对肉眼隐藏了,减少了明面上的参数,并且HTTP协议是规范固定的,统一性相对较强,但是每次都需要设置请求头,需要一定知识基础.
- 另外一种做法是
URI添加数据格式后缀:
/students/123.json=读取编号为123的学生数据,并以json数据格式返回/students/123.xml=读取编号为123的学生数据,并以xml数据格式返回
而字符集使用通用类型的utf-8则(不管是哪种方式,都推荐字符集用这种)
##在REST里如何解读URI的规则(todo:待补充)?
REST API从木愣到够呆的更多相关文章
- 求助:我需要用Python中parsel模块提取文章的文本内容,有什么办法
求助: 像这样 我想提取小说文章内容 怎么提取 我要用的模块有parsel <!DOCTYPE html> <html lang="en"> <hea ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- Uploadify 结合 Web API 2 上传问题
最近使用jQuery.Uploadify和Web API配合来做上传,碰到问题,还木有办法解决,记录一下: 环境:jQuery 1.10.2,Uploadify 3.2.1,SWFObject 2.2 ...
- 使用Adminlite + ASP.NET MVC5(C#) + Entityframework + AutoFac + AutoMapper写了个api接口文档管理系统
一.演示: 接口查看:http://apidoc.docode.top/ 接口后台:http://apiadmin.docode.top/ 登录:administrator,123456 二.使用到的 ...
- Libvlc API 简单说明 [转]
Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...
- UWP Composition API - GroupListView(二)
还是先上效果图: 看完了上一篇UWP Composition API - GroupListView(一)的童鞋会问,这不是跟上一篇一样的吗??? 骗点击的?? No,No,其实相对上一个有更简单粗暴 ...
- ReactJS入门(三)—— 顶层API
本文基本跟着官方文档把API都走一遍,但会有实例来解释应该怎么用,木有比我更详细的API文档咯. React.createClass 参数:CONFIG(object) 创建一个ReactClass( ...
- 扫描仪API接入大全:Twain, WIA 或 两者不具有.[换个思路 春暖花开]
最近做和扫描仪接入的扫描应用程序,深深感觉到了来自底层设备和WINDOWS协议的恶意.软件专业,对计算机深层次通知机制和协议,以及与之相连接的机器的接入协议和一些参数,当时并木有认真学习和了解,前一阵 ...
- 如何在网页中调用百度地图api
我想在木有提供地图接口的年代,前端工程师门要么只写上企业的具体地址,要么就是用一张标有自己位置的地图图片.但是现在不一样啦!为了增强用户体验,谷歌,甚至百度都很开放了,你可以在他们的网站上找到地图接口 ...
- 天气预报API(四):全国城市代码列表(“新编码”)
说明 天气预报API系列文章涉及到的天气网站10个左右,只发现了中国气象频道和腾讯天气城市代码参数特别: 暂且称 中国气象频道.腾讯天气使用的城市代码为 "新编码" 注:中国气象频 ...
随机推荐
- Diary -「联合省选 2023」鸢尾
零 她们诞生于那样一段迷茫的时期,她们总是一个唱着虚幻的梦呓,一个哼着现实的词曲. 「平行的世界 / 另一个 / 我是怎样的」?如果那时的,虚幻的歌者没有妥协,现在的她会是怎样的人呢? 我 ...
- Diary -「NOI 2022」尘降
又一次,以这样一种身份来到国赛赛场.起跑线延长出赛场外,我将于此开始又一场已知"无用"的竞技. 虚无中 我的尘埃盲目漂泊摇晃 时间回到数个月前的省选,\(600\) 分的总 ...
- 基于Qt的OFD阅读器开发原理与实践
摘要 本文详细探讨了基于Qt开发OFD阅读器的原理与实践.通过解析OFD文件格式.构建文档结构.实现页面渲染.处理用户交互以及进行性能优化,本文展示了如何使用Qt框架开发一个功能强大.性能优异的OFD ...
- document.querySelector 有多个类 的情况
document.querySelector 有多个类 document.querySelector 方法用于返回文档中匹配指定 CSS 选择器的第一个元素.如果要查询具有多个类的元素,可以将它们作为 ...
- SpringCloud Alibaba(一) - Nacos 服务注册与发现,OpenFeign远程调用
1.基础项目过目介绍 1.1 数据库创建 1.2 项目模块分布 1.3 测试http接口调用 1.3.1 http接口调用配置类 //http接口调用配置类 @Configuration public ...
- Hadoop 概述(一)
Hadoop概述信息 hadoop 有三大组成部分,HDFS(分布式文件存储系统).YARN(资源管理器).MAPREDUCE(分布式计算框架) ,下边我们来简单介绍一下 HDFS 分布式文件存储系统 ...
- 使用_begin{thebibliography}__bibitem 如何参考文献
本人是tex新手,如果各位大佬有更好的方法欢迎分享,不胜感激. 适用情况 本文适用于使用\begin{thebibliography}和\bibitem排序的情况,如果使用bibtex排序那么网上很多 ...
- ISA-L库调研
本文分享自天翼云开发者社区<ISA-L库调研>,作者:何****尔 1.Intel SIMD指令集 SIMD(single instruction multiple data)单指令多数据 ...
- 玩转云端 | AccessOne实用窍门之三步搞定门户网站防护与加速
随着互联网的飞速发展,网站建设已成为企事业单位推广.提供服务的重要途径之一.在数字技术快速迭代的当下,如何在保障网站安全的前提下提供高效服务,是企事业单位需要着重考虑的内容. 网站安全防护是网站建设后 ...
- golang轻量级版本管理工具g安装使用
使用 g 可以在 windows 上切换使用不同版本的 golang GitHub仓库地址 https://github.com/voidint/g GitHub下载连接 https://github ...