目前主流的三种web服务交互方案:

REST (Representational State Transfer) 表征性状态转移

SOAP (Simple Object Access Protocol)简单的对象访问协议

XML-RPC (XML Remote Procedure Call)基于XML的远程过程调用

但最为流行最为常用就是restful,而当一个架构符合REST的约束条件和原则,我们就称它为restful架构。

为了避免明文传输,更好的维护数据传输时的安全性,restful规范推荐使用https替代http。

1.restful规范就是在想要完成程序间数据交互的代码时所需要的遵循的规范,它视网上的一切数据为资源,所有的操作都是在对资源进行增删改查,所以这是一种面向资源式的编程。

2..如果说数据库就是资源库,那么URL就是用于检索的目录和直达资源的高速路。为了避免歧路亡羊的事情发生,所以在编写URL的时候必须遵循固定的规范,表达出的信息也要清晰明确,不至于产生歧义。

在URL中要明确体现一下几点:

1.api标识:http://www.xxxx.com/api/...

2.版本信息:http://www.xxxx.com/api/v1...

3.用名词而不是动词来表示所访问资源的种类,所用名词往往与数据库表格的名称相同

3.如果要通过在url中添加一些筛选条件,实现对资源的精准定位和对状态的精确控制,一般是以?+关键字= int整型 (需要在前段做好正则匹配)

http://www.luffycity.com/api/user/?page=1&type=9 #

4.restful规范下的URL代码比FBV下的URL要更加精简,只需要一个URL就能完成所有操作,因为他是根据不同的请求方法来判断对数据进行何种操作,而不需要分别为增删改查各设置一个URL。

5. 返回值:要以json的形式返回值,delete的返回值为空

GET http://www.luffycity.com/api/user/

[

{'id':1,'name':'alex','age':19},

{'id':1,'name':'alex','age':19},

]

POST http://www.luffycity.com/api/user/

{'id':1,'name':'alex','age':19}

	GET http://www.luffycity.com/api/user/2/
{'id':2,'name':'alex','age':19} PUT http://www.luffycity.com/api/user/2/
{'id':2,'name':'alex','age':19} PATCH https//www.luffycity.com/api/user/2/
{'id':2,'name':'alex','age':19} DELETE https//www.luffycity.com/api/user/2/

6.给用户返回状态码:

- 200,成功

- 300,301永久 /302临时

- 400,403拒绝 /404找不到

- 500,服务端代码错误

  1. 操作异常时,要返回错误信息

     {
    error: "Invalid API key"}
  2. 要为可能跳转的下一个网页要提供接口:Hypermedia AP

    {

    'id':2,

    'name':'alex',

    'age':19,

    'depart': "http://www.xxx.com/api/user/30/"

    }

resful规范: 进行数据交换时的代码潜规则的更多相关文章

  1. [Elixir007] on_definition规范函数定义时的各种潜规则

    1.需求 写一个基于memcache的cache模块, 需要在key前面加上特定的前缀, 所以user cache的原始的store函数应该写成 # user.exdef store(user_id, ...

  2. JSON、使用JSON进行数据交换的基础和原理

    1. JSON 1.1. JSON 1.1.1. 什么是JSON JSON即Javascript对象表示法,是一种现在主流的数据交换格式.之所以应用广泛还是由其简单易读所决定的. 简单,只有六种类型的 ...

  3. GPIO硬件资源的申请,内核空间和用户空间的数据交换,ioctl(.....),设备文件的自动创建

    1.通过GPIO库函数控制LED   open("/dev/myleds",...)       close(fd)   ----------------------------- ...

  4. MFC-控件操作及数据交换

    对控件进行操作函数如下: 1.ShowWindow() TURE为显示控件,FALSE为隐藏该控件: if(条件) GetDlgItem(ID)->ShowWindow(TRUE);//满足条件 ...

  5. 普通的jdbc事务在插入数据后 下面的代码报错时 数据不会回滚 但是 spring的事务会回滚

    普通的jdbc事务在插入数据后 下面的代码报错时 数据不会回滚 但是 spring的事务会回滚

  6. 当From窗体中数据变化时,使用代码获取数据库中的数据然后加入combobox中并且从数据库中取得最后的结果

    private void FormLug_Load(object sender, EventArgs e) { FieldListLug.Clear();//字段清除 DI = double.Pars ...

  7. Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案

    本文翻译自LMAX关于Disruptor的论文,同时加上一些自己的理解和标注.Disruptor是一个高效的线程间交换数据的基础组件,它使用栅栏(barrier)+序号(Sequencing)机制协调 ...

  8. JSON的基本结构和数据交换原理

    0.补充的写在前面的话 2017.03.29 补充内容 最近看到这篇博客的阅读量,想来应该是有部分网友来过想要了解JSON的基本概念,这篇博文写得可能不是那么好,所以现在再补充贴一位老师的文章,希望能 ...

  9. Js中JSON数据交换使用总结

    Json格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是JavaScript原 ...

随机推荐

  1. Spring Boot教程(七)通过springboot 去创建和提交一个表单

    创建工程 涉及了 web,加上spring-boot-starter-web和spring-boot-starter-thymeleaf的起步依赖. <dependencies> < ...

  2. 如何通过Thread查看一个方法被调用的顺序

    Test1 package com.dwz.concurrency.chapter11; public class Test1 { private Test2 test2 = new Test2(); ...

  3. AGC024E Sequence Growing Hard

    题意 给出\(n\),\(m\),\(mu\),问有多少个序列组\((A_0,A_1,\dots,A_n)\)满足: 序列\(Ai\)的长度恰好为\(i\) 所有元素均在\([1,m]\) \(A_{ ...

  4. 学习GeoServer遇到的问题及答案

    简介:本文的记录学习GeoServer遇到的问题,如果已有答案将会附上. 1.GeoServer介绍?,功能? GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 Ge ...

  5. 什么是文件的BOM头

    1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...

  6. recyclerView 嵌套 recyclerView 点击被拦截

    上层recyclerView.setLayoutFrozen(true);下层可以接收到点击事件.

  7. ? 这是个很好的问题。Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择。请看 https://golang.org/issue/17969 结束语(Closing notes) 通过研究 Go 垃圾收集器,我能够理解 Go GC 当前结构的背景以及它如何克服它的弱点。Go发展得非常快。如果你对 Go感兴趣,最好继

    ? 这是个很好的问题.Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择.请看 https://golang.org/i ...

  8. <JavaScript>谈谈javascript语法里一些难点问题(一)

    1)    引子 前不久我建立的技术群里一位MM问了一个这样的问题,她贴出的代码如下所示: var a = 1; function hehe() { window.alert(a); var a = ...

  9. Android 显示系统:OpenGL简介和Gralloc代码分析

    一.OpenGL ES与EGL Android的GUI系统是基于OpenGL/EGL来实现的. 由于OpenGL是通用函数库,在不同平台系统上需要被“本土化”——把它与具体平台的窗口系统建立起关联,F ...

  10. C# Socket TcpClient 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接。。

    开始的代码: byte[] data = Encoding.UTF8.GetBytes(sInfo);                    tcpns.Write(data, 0,1024); 修改 ...