Rest ful API的一些基本概念

0,应用背景

      Rest ful api是  Fielding(楼下那叔叔) 在他的论文《Architectural Styles and the Design of Network-based Software Architectures》中提出的,论文地址:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。(。。。)

  

       因为最近在做hybird App,需要调用使用Sping mvc发布的接口,就想尝试一下新的接口形式,希望能规范下接口开发,方便调用,具体都有什么好效果,再议。

二,REST ful 基本概念

                      REST:Representational State Transfer,即表现层状态转换。在网络上,我们通过URI定位资源,之后将资源呈现出来的具体形式叫做它的“表现层”。

                     理解状态转换:

                                  

 

   三,URI的潜规则

                 在REST ful API设计中,客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化",所以,可以看出我们对每一个URL中代表的资源操作都放在了http请求中,所以,在URL中,不应该再包含有动词。

            代表资源的URI应该只包含名词。

       

  四,常用HTTP动词

                  

五,关于前端和后台的交互实现

          前端对于API数据的操作放在了我们AngularJs的service模块中,通过$resource来访问我们的API接口,实现对数据的CRUD操作,其实感觉跟我们JQ中的AJAX是差不多的,但是实现起来当然还有一些小细节要注意。

 

       

    在后台,主要是在Spring Mvc的Controller中,对于方法,我们建议返回JSON数据,通过@ResponseBody注解标注方法,并引入JackJson的Jar包,在spring mvc的配置文件中加入可返回JSON的配置。(根据Spring MVC  的版本而定,如下,为了分离前后台开发,接口对接完成之后,又后台先快速开发一套假数据的项目,快速部署,方便前端调用)。

    

@Controller
@RequestMapping("/curriculumschedule")
public class GetDataController {

	/*测试发布*/
	@RequestMapping("/mvc")
	public String helloMvc() {
		return "home";
	}

	/*登陆接口*/
	@ResponseBody
	@RequestMapping(value="/login/userCode/{userCode}/password/{password}",method=RequestMethod.GET)
	public String login(@PathVariable("userCode") String userCode,@PathVariable("password") String password,HttpServletResponse response){
		response.setHeader("Access-Control-Allow-Origin", "*"); //允许哪些url可以跨域请求到本域
		System.out.println("用户名为:"+userCode);
		System.out.println("密码为:"+password);
		return "{\"result\":true,\"allUsers\":{\"id\":\"12EBA23Qsew345\",\"userName\":\"二牛\",\"userCode\":\"1016685862\",\"password\":\"1\",\"headImage\":\"img/01.jpg\",\"roleType\":0}}";
	}

	/*查询今日课表*/
	@ResponseBody
	@RequestMapping(value="/todayLession/studentCode/{studentCode}",method=RequestMethod.GET)
	public String todayLession(@PathVariable("studentCode") String studentCode,HttpServletResponse response){
		response.setHeader("Access-Control-Allow-Origin", "*"); //允许哪些url可以跨域请求到本域
		System.out.println("学生code为:"+studentCode);
		return "{\"result\":true,\"DayCourse\":[{\"startTime\":\"08:00\",\"endTime\":\"10:00\",\"courseName\":\"高等数学\",\"teacherName\":\"王玉兰\",\"roomName\":\"11教501\"},{\"startTime\":\"10:00\",\"endTime\":\"12:00\",\"courseName\":\"英语\",\"teacherName\":\"杨兰\",\"roomName\":\"12教224\"},{\"startTime\":\"14:00\",\"endTime\":\"16:00\",\"courseName\":\"人体解剖学\",\"teacherName\":\"高峰\",\"roomName\":\"10教104\"},{\"startTime\":\"16:00\",\"endTime\":\"18:00\",\"courseName\":\"生物科学\",\"teacherName\":\"刘二\",\"roomName\":\"6教302\"}]}";
	}

	/*查询本周课表*/
	@ResponseBody
	@RequestMapping(value="/weekLession/studentCode/{studentCode}",method=RequestMethod.GET)
	public String weekLession(@PathVariable("studentCode") String studentCode,HttpServletResponse response){
		response.setHeader("Access-Control-Allow-Origin", "*"); //允许哪些url可以跨域请求到本域
		System.out.println("学生code为:"+studentCode);
		return "{\"result\":true,\"ItemWeekIndex\":\"第二周\",\"Content\":[{\"weekIndex\":1,\"courseInfo\":\"11教501高等数学\",\"periodTimesIndex\":1},{\"weekIndex\":6,\"courseInfo\":\"11教232大学英语(一)\",\"periodTimesIndex\":2},{\"weekIndex\":7,\"courseInfo\":\"11教232食品安全学\",\"periodTimesIndex\":4},{\"weekIndex\":2,\"courseInfo\":\"11教232乳制品工艺学\",\"periodTimesIndex\":1},{\"weekIndex\":2,\"courseInfo\":\"11教232大学英语(二)\",\"periodTimesIndex\":2},{\"weekIndex\":2,\"courseInfo\":\"11教232计算机基础(一)\",\"periodTimesIndex\":4},{\"weekIndex\":3,\"courseInfo\":\"11教234人体解剖学\",\"periodTimesIndex\":2},{\"weekIndex\":3,\"courseInfo\":\"11教234植物资源学\",\"periodTimesIndex\":3},{\"weekIndex\":3,\"courseInfo\":\"11教234花卉栽培技术\",\"periodTimesIndex\":4},{\"weekIndex\":4,\"courseInfo\":\"11教234植物衰老生物学\",\"periodTimesIndex\":2},{\"weekIndex\":5,\"courseInfo\":\"11教234文献检索\",\"periodTimesIndex\":3}]}";
	}

         关于移动端和后台开发的分离,也可以使用野狗模拟的假数据,替代了使用本地JSON的形式。前段时间看NodeJs的时候,发现NodeJS里面有个模块faker,也有这方面的效果,但是还木有具体尝试,但是使用NodeJS进行开发也能做到两端分离开发。等有时间了再研究下,有用过的大神们可以留个言。

             

   

时间: 2024-10-14 04:34:35

Rest ful API的一些基本概念的相关文章

windows-REST ful api发布到linux报错404

问题描述 REST ful api发布到linux报错404 REST ful api使用spring mvc发布在windows上可以正常get到json,但是发布到linux(jboss服务器)上就一直报404,无log,求解??? 解决方案 Linux区分大小写 ftp上传文件到Linux服务器时需要设置文件权限 777 644 744等

Amazon Web Services市场:API驱动型生态系统

API驱动型业务的概念近年来逐步兴起.事实上,人们发现在数字化业务领域,应用程序编程接口与产品间的界线正变得愈发模糊. 其基本概念确实非常强大:发布API.允许客户参与.最终利用其实现价值交换. 为了切实完成这项目标,我们当然需要具备一定规模的严肃业务以及与之相匹配的技术架构.举例来说,API最好得到严格定义,否则您的业务可能遭遇意想不到的影响.另外,API必须易于使用,否则将带来噩梦般的客户体验.另外,API必须能够进行成功整合,从而通过切实起效以实现对接.监控及获利. Amazon Web

API来了!未来行业的新渠道

近段时间最受人关注和调侃的就非"互联网思维"和"移动互联"莫属了.有人说,粉丝经济是互联网思维的基础.但是在传统的IT管理厂商心中,所有创新思维的基础,归根结底还是技术.正是技术的进步才催生了互联网经济,而这种进步转变了人的思想之后,才有了更创新的想法.CA Technologies中国区技术总监刘国强发表了自己的看法:未来所有企业所要面对的问题,是如何以应用为中心.以软件为中心.无论是制造业.航空业.金融业还是服务业,最后都会慢慢演变成为IT业,因为软件是传递服务

深入分析node.js的异步API和其局限性_node.js

用异步API的原因 异步的概念之所以首先在Web2.0中火起来,是因为在浏览器中Javascript在单线程上执行,而且他还与UI渲染公用一个线程.这意味着Javascript在执行的时候UI渲染和响应是处于停滞状态的.为了用户体验更好而采取异步的方式(当然,这在所谓的单线程语言中)不阻塞主线程继续响应用户操作.这属于用户体验的范畴. 同样的,如果有其他语言经验的工程师当然也明白,CPU在线程间切换是需要消耗大量的时间的(主要为上下文之间的切换和缓存),所以提高效率也是使用异步API的理由. 当

拥抱API抢夺互联网经济先机

在现在,没有任何事物能够像"互联网思维"和"移动互联"一边受人关注一边备受调侃的了.有人提出粉丝经济等等是互联网思维的基石,但是在一家传统IT管理厂商眼中,任何一个新思维背后,真正能称得上基石的,还是技术.技术的进步催生了互联网经济,而这种变化反映在人的思想里,才变成了新思维. CA Technologies中国区技术总监刘国强认为未来所有企业都要面对以应用为中心.以软件为中心的问题.无论是制造业.航空业.金融业或者服务业,到最后都会演变成为IT企业,因为所有的服务

API经济的出路与机遇——记语忆科技第一届阿里云API大赛参赛体悟

转眼间,第二届阿里巴巴"诸神之战"--API as a service大赛已近在眼前,难以想象在半年前,我们的团队就站在第一届"API as a service"决赛圈的舞台上,面对台下数百名优秀的开发者.创业团队以及评委老师展示我们的参赛作品,倾听专家的意见,感受思维的碰撞.如今想来,这段经历仍是弥足珍贵,颇有裨益的. 回想起第一届 API as a Service 大赛,作为杭州语忆科技的代表,我们带着独立开发的"语忆网络文学IP分析平台"有

.NET/ASP.NET Routing路由(深入解析路由系统架构原理)

阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1UrlRoutingModule 对象内部结构 4.2RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3RouteValueDictionary.RouteData.RequestContext 路由数据对象模型 4.4IRouteHa

初学者如何开发出高质量的J2EE系统

j2ee|初学 J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向. 首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系. J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase.到Delphi/VB等C/S结构,发展到B

初学者如何开发出一个高质量的J2EE系统

j2ee|初学   J2EE学习者越来越多,J2EE本身技术不断在发展,涌现出各种概念,本文章试图从一种容易理解的角度对这些概念向初学者进行解释,以便掌握学习J2EE学习方向. 首先我们需要知道Java和J2EE是两个不同概念,Java不只是指一种语言,已经代表与微软不同的另外一个巨大阵营,所以Java有时是指一种软件系统的流派,当然目前主要是.NET和Java两大主流体系. J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase.到Delphi/VB等C/S结构,发展