如何设计好程序员自己的UI-RESTful 风格的接口设计。

最近在做一个客户端程序的架构设计,看了下服务器给的初版接口文档,发现做的非常不好,接口设计没有任何规范可言,也没有规律。着手修改了一下,给出了一些修改意见。

现在把这些心得分享给大家,希望大家以后再设计接口时,也能遵循这些规范,让我们的程序员在coding的时候能够更加顺手。

所谓RESTful架构,就是 Representational State Transfer。但是实际上这个词组少了一个主语 也就是Resources.资源的意思。合起来就是 资源 表现层的状态转化。

比较绕口不好理解。我来解释一下。

资源大家肯定都懂。比如网络上的文字 图片 视频 等等都是资源。

Representational  表现层,就是对这些资源的表现形式。比如文本,可以用txt 用html 用xml 用json来表示。图片可以用jpg png等等 这些东西就是表现层。

到这里,要注意一下,我们的uri。只能代表资源的实体,而不能代表资源的表现形式。比如我们很多网页的地址后面会跟一个 .html。实际上这个是非常不好的

风格。.html 是代表资源的表现形式。因为这是一种格式。但是uri 只能表示资源的位置。所以这个表现形式 .html 应该放在http请求头的accept和Content-Type

这边。这两个字段才是对Representational 的表述。

最后说一下这个 State Transfer ,在http的世界中 对资源uri的操作 只能是 put delete get 和post。这个就代表了资源的转化。

下面来举例说明怎么设计具有restful 风格的api 或者uri。

1.URI 里面不得有动词。

动词应该放到http头中。比如说  /news/show/1

这个URI就设计的不好。因为show是动词。所以这个URI 应该设计成 /news/1. URI只能代表资源。

然后这个show 就放在http协议的头部中 也就是get方法即可。

2.如果某些操作 put delete get post这四个http 词汇表现不了怎么办。

比如说 要设计一个 a玩家 向b玩家汇款 200元 这个操作。

有的人设计的时候就是

POST /accounts/a/transfer/200/to/b

但RESTful 风格 让我们不要放动词在uri里面所以这个接口 我们应该

POST /transaction HTTP/1.1

Host: 127.0.0.1

from=a&to=b&amount=200

这样风格就完美。

3.版本号如何表示。

服务器的接口经常升级 所以每一次的接口都会有版本号。有的时候客户端在访问的时候 要把自己客户端使用的服务器接口版本号发过去 让服务器决定如何相应。

很多人会这么设计

http://www.burning.com/app/1.0/test

但实际上这样做风格也很差。我们应当把版本号放在。http头的Accept 字段中。

4.怎么一次请求多个资源。这种uri应该如何设计。

比如我们可以这样

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b/classification,name HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded

RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 43
Content-Type: application/x-www-form-urlencoded; charset=utf-8

classification=Comfort&name=Central

要注意的是

RESTful HTTP服务端程序必须根据HTTP规范返回状态码。状态码的第一个数字标识返回类型,1xx表示临时响应,2xx表示成功响应 ,3xx代表转发,4xx表示客户端错误,5xx代表服务端错误。使用错误的响应码,或者总返回200响应,并在消息主体中包含特定应用程序的响应,这两种做法都是不好的实践。

时间: 2024-07-30 18:39:40

如何设计好程序员自己的UI-RESTful 风格的接口设计。的相关文章

领域驱动设计-让程序员心中有码(九)

一.易于腐化的软件设计 犹记得刚刚参加工作时,是地图厂商四维图新集团旗下的一家子公司,主要从事规划测绘相关软件研发的公司.当时我的项目是为勘测设计院提供相对应的应用软件,对地理信息和规划相关的图纸信息,几乎已经专业水平.事实上,规划设计大概和软件设计类似,有规划的设计.或无规划的设计,造成的结果几乎是天壤之别. 我们或许很容易就能设想到一个毫无规划设计的城市,纵横交错的路网.杂乱无章式的建筑布局.各种凌乱的棚户区设计,恰好象征着软件设计的无序性,也恰好体现了软件企业在经费不足.组织缺乏管理.开发

受康奈尔笔记法启发设计的程序员算法手写本

大多数程序员都习惯了平时在电脑上敲代码,但也有些情境要求我们手写代码,比如平时学习时做纸质笔记,完成老师布置的课程作业,同事之间交流讨论讲解思路,ACM比赛时手写分析算法,还有最常见的面试手写算法等.昨天看了康奈尔笔记法,觉得有点意思,于是想着把它应用到程序员的圈子里来,可以在面试等场合很好的向面试官阐述算法思路同时规范书写,希望能给大家带来一些帮助. 一.什么是康奈尔笔记法 图1.康奈尔笔记法 5R笔记法,又叫做康奈尔笔记法,是用产生这种笔记法的大学校名命名的.这一方法几乎适用于一切讲授或阅读

软件架构设计:程序员向架构师转型必备(第二版) 笔记

1 从程序员到架构师 1 1.1 软件业人才结构 1.1.1 金字塔型还是橄榄型? 1 1. 橄榄型:中间大两头小:   2. 区分开学历结构和能力结构:学历结构:橄榄型,能力结构:金字塔型: 1.1.2 从程序员向架构师转型 2 1. 软企该怎么做? 2 解析软件架构概念 10 1. 架构的概念很多种,不统一: 2.1 软件架构概念的分类 11 1. 架构的概念很难统一: 2. 本书将概念分为组成派和决策派两大流派,来帮助理解: 2.1.1 组成派 11 1. 软件系统的架构将系统描述为计算组

《PHP程序员面试笔试宝典》——如何回答算法设计问题?

如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎实,理解得是否深入,只要面试前买本<程序员面试笔试宝典>,应付此类题目完全没有问题.但遗憾的是,很多世界级知名企业也深知这一点,如果纯粹是出一些毫无技术含量的题目,对于考前"突击手"而言,可能会占尽便宜,但对于那些技术好的人而言是非常不公平的.所以,为了把优秀的求职者与一般的求

黑马程序员--java基础------继承,抽象,接口

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------  继承 一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单独的这个类称为父类或者超类. 这样类与类之间就存在了继承的关系.子类可以直接访问父类中的非私有的属性和行为.在代码中通过extends关键字表示继承关系.例: class

黑马程序员——JAVA学习笔记四(继承、接口、内部类)

1,    通过extends关键字让类与类之间产生继承关系.多个类中存在相同属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需定义这些属性和行为,只要继承那个类即可,已存在的类叫做超类,基类,或父类.新类称为子类,派生类,孩子类. 子类可以直接访问父类中的非私有的属性和行为.子类无法继承父类中私有的内容.JAVA不支持多继承,只支持单继承,多实现. 继承提高了代码复用性,让类与类之间产生了关系.为多态提供了前提. 2,    super关键字代表父类中成员变量内存空间的标示.两个作用

黑马程序员---java基础-Java类 继承&amp;抽象&amp;接口

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.继承 继承是所有OOP语言不可缺少的部分,在java中使用extends关键字来表示继承关系.当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承.比如下面这段代码: 1 class Person { 2 public Person() { 3 4 } 5 } 6 class Man extends Person { 7 public Man()

黑马程序员-JAVA学习之Comparable与Comparator接口

--------android培训.java培训.期待与你交流!-------- public interface Comparator<T> 此接口提供对某个collection集合对象进行强行整体排序的比较函数.可以将 Comparator 传递给 sort() 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现自定义精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的co

程序员------天生的软件UI设计师

一个软件项目,谁才是软件开发的主体,是软件UI设计师?还是程序员? 这还用问吗?当然是程序员拉.引用以下alienbat知友的一段评论:对于软件开发而言,码农的工作是必需的.设计师的工作是可选的. 举个例子吧,国内政府,医院,银行所使用的定制软件界面非常丑陋,肯定是程序员做,没有软件UI设计师参与.说明没有软件UI设计师也能进行软件开发,只是界面丑了点.一个软件项目,程序员才是软件产品的生产者,而不是设计师.设计师的作用是什么啊,更多充当的UI界面设计与美化,比较通俗的一点来说,就是光“说”不”