我有一个REST服务,可以返回所有学生。
URL : rest/students
我可以添加可选参数,例如
URL : rest/students?department=1001&valid=true
对于这个用例,我创建了一个角度服务,
angular.module('app.student').
factory('StudentService',StudentService);
StudentService.$inject = ['$http','ENV_CONSTANTS'];
function StudentService($http,ENV_CONSTANTS){
var service = {
getAllStudents : getAllSTudents,
getValidStudents : getValidStudents,
getValidStudentByDepartment : getValidStudentByDepartment
};
return service;
function getAllStudents(){
return $http.get(ENV_CONSTANTS.baseUrl+'/students');
}
function getValidStudents(){
return $http.get(ENV_CONSTANTS.baseUrl+'/students?valid=true');
}
function getValidStudentByDepartment (departmentId){
return $http.get(ENV_CONSTANTS.baseUrl+
'/students?valid=true&departmentId'+departmentId);
}
}
但我觉得这不是一个好的设计,因为对于每个查询参数或查询参数的组合我需要创建一个方法。任何人都可以建议一个正确的方法吗?
答案 0 :(得分:2)
网址建设(baseUrl +" / my-suffix")的设计效果不佳。
查询参数构建是。 public int a = 0;
public int b = 0;
if (a == 1)
{
//"check for two seconds if int b becomes 1 otherwise go back to usual loop"
}
//basically a second if-statement would follow:
if ( b == 1 within 5 seconds)
{
//"go to next step"
}
可以为此制作地图:
$http.get
I.E:
$http.get(myUrl, { params : myParamMap })
这允许参数构建更容易和更漂亮
您还可以预生成您的网址常量:
$http.get(myUrl, { params : { valid : true, departmentId : "myDepId" } });
避免在每个方法中构建网址
var STUDENT_URL = ENV_CONSTANTS.baseUrl+'/students';
哪种方式更易于维护
然后你可以分解:
$http.get(STUDENT_URL, { params : myParams });
能够致电:
function performStudentCall(paramMap) {
return $http.get(STUDENT_URL, { params : paramMap });
}
这里每个操作都有一个服务方法,这是正确的方法,同时只保留一个方法来执行所有http调用。
答案 1 :(得分:1)
您可以创建一个函数,并在函数参数中传递带字段值对的查询参数对象。
类似
function getStudents(queryParamObject){
return $http.get(ENV_CONSTANTS.baseUrl+'/students', { params : queryParamObject });
}