失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【API设计风格—RESTful】:前端如何调用RESTful风格的API(三)

【API设计风格—RESTful】:前端如何调用RESTful风格的API(三)

时间:2023-01-15 22:30:20

相关推荐

【API设计风格—RESTful】:前端如何调用RESTful风格的API(三)

前端使用的是Ionic+AngularJS的架构,下面我们看看如何用AngularJS+$Resource定义Restful客户端。

【1】如何写

模板

定制的服务被定义在app/js/services,所以我们需要在布局模板中引入这个文件。另外,我们也要加载angularjs-resource.js这个文件,它包含了ngResource模块以及其中的$resource服务,我们一会就会用到它们。

在index.xml中引入js文件

<script src="js/services.js"></script><!--使用Restful必须引入的脚本 --><script src="lib/ionic/js/angular/angular-resource.js"></script>

服务

在js/services.js文件中写如下代码

angular.module('itoo-basic-curriculumschedule.services', ['ngResource'])//定义了一个课程的服务工厂.factory('lessonService', function($resource,baseUrl){return $resource(baseUrl+'/student/:studentId/course/:courseId', {},{get: {method:'GET',isArray:false},query: {method:'GET',isArray:true},save: {method:'POST',isArray:false},update: {method:'PUT',isArray:false},del:{method:'DELETE',isArray:false}});})

把服务模块添加到app.js的依赖数组里面

itoo-basic-curriculumschedule.services和app.js中的要一致(即把模块添加到依赖数组),app.js中写如下代码

angular.module('itoo-basic-curriculumschedule', ['ionic','itoo-basic-curriculumschedule.controllers','itoo-basic-curriculumschedule.routes','itoo-basic-curriculumschedule.services','itoo-basic-curriculumschedule.directives'])

备注:

1.baseUrl是在app.js定义的全局变量

.constant(‘baseUrl’, ‘http://localhost:8100/api‘); //定义请求数据的地址,这里是一个代理服务器地址全局变量

2.lessonService就是我们定制的服务的名称

3.里面用key,value的形式定义了具体方法

控制器中对方法进行调用

在controller.js中写

.controller('lessonCtrl',function($scope,lessonService){//GET单个JSON $scope.lesson=lessonService.get({studentId:1,courseId:1});//GET:JSON数组$scope.lessons=lessonService.query({studentId:1});//POST:保存一个新对象$scope.tempcourse = { code: '0008',courseName: '中国近现代史' };var course=$scope.tempcourse;$scope.savedLesson=lessonService.save({studentId:1},course);//PUT:修改JSON对象保存lessonService.get({studentId:1,courseId:3},function(course){//course.courseName="修改的课程:物理学";course.code="0006"; $scope.updateLesson=lessonService.update({studentId:1,courseId:3},course);},function(){});//DELETE$scope.deleteLesson=lessonService.del({studentId:1,courseId:5});})

页面上显示返回的JSON数据

tab-todayLesson.xml

<div class="list card" ng-controller="lessonCtrl"><p>GET请求单个JSON:{{lesson}}</p><p>GET请求JSON数组:{{lessons}}</p><p>POST提交新建的JSON对象:{{savedLesson}}</p><p>PUT提交修改的JSON对象:{{updateLesson}}</p><p>DELETE:{{deleteLesson}}</p></div>

参考资料:/A00e

【2】$resource方法说明

使用

$resource(url[, paramDefaults][, actions]);

参数

备注:

如:服务端定义的方法:

@RequestMapping(value="/student/{studentId}/course/{courseId}",method=RequestMethod.POST)

AngularJS中

.factory('lessonService', function($resource,baseUrl){return $resource(baseUrl+'/student/:studentId/course/:courseId', {courseId:'@id'},{save: {method:'POST',isArray:false}, });})

controller中调用

lessonService.get({studentId:1,courseId:3},function(course){//course.courseName="修改的课程:物理学";course.code="0006"; $scope.updateLesson=lessonService.update({studentId:1,courseId:3},course);},function(){});

lessonService.update({studentId:1,courseId:3}这里就不需要传递courseId参数了(用删除线标注的),会自动将course.id赋值给参数courseId,所以对象的属性要和@后跟的名字一致

HTTP GET “类”动作: Resource.action([parameters], [success], [error])

non-GET “类”动作: Resource.action([parameters], postData, [success], [error])

Success回调以(value, responseHeaders)参数调用。Error回调以(httpResponse)参数回调,比如:要在服务端返回数据之后,再进行某些操作,就要在回调函数里写代码

如:POST方法

$scope.savedLesson=lessonService.save({studentId:1},course,function(){},function(){});

参考资料:/content-5602494.html

/group/topic/348581/

附:前后端方法对应列表

大家可以结合上一遍博文一起看。

如果觉得《【API设计风格—RESTful】:前端如何调用RESTful风格的API(三)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。