如何使用可选查询参数为 REST 服务设计 angular 服务 class
How to design angular service class for REST service with optional query params
我有一个 REST 服务,returns 所有学生。
URL : rest/students
我可以给它添加可选参数,
URL : rest/students?department=1001&valid=true
对于这个用例,我创建了一个 angular 服务,
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);
}
}
但我觉得这不是一个好的设计,因为我需要为每个查询参数或查询参数的组合创建一个方法。有人可以建议一种正确的方法吗?
您可以创建一个函数,并在函数参数中传递带有字段值对的查询参数对象。
类似
function getStudents(queryParamObject){
return $http.get(ENV_CONSTANTS.baseUrl+'/students', { params : queryParamObject });
}
恕我直言,url 建筑(baseUrl + "/my-suffix")的设计不错。
查询参数构建是。 $http.get
可以拍一张地图:
$http.get(myUrl, { params : myParamMap })
即:
$http.get(myUrl, { params : { valid : true, departmentId : "myDepId" } });
这让参数构建更容易、更漂亮
您还可以预先生成 url 常量:
var STUDENT_URL = ENV_CONSTANTS.baseUrl+'/students';
避免在每个方法中构建 url
$http.get(STUDENT_URL, { params : myParams });
哪个更易于维护
然后你可以因式分解:
function performStudentCall(paramMap) {
return $http.get(STUDENT_URL, { params : paramMap });
}
能够调用:
function getValidStudentByDepartment (departmentId) {
return performStudentCall({ valid : true, departmentId : departmentId });
}
这里每个操作都有一个服务方法,这是正确的方法,同时只保留一个方法来执行所有 http 调用。
我有一个 REST 服务,returns 所有学生。
URL : rest/students
我可以给它添加可选参数,
URL : rest/students?department=1001&valid=true
对于这个用例,我创建了一个 angular 服务,
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);
}
}
但我觉得这不是一个好的设计,因为我需要为每个查询参数或查询参数的组合创建一个方法。有人可以建议一种正确的方法吗?
您可以创建一个函数,并在函数参数中传递带有字段值对的查询参数对象。
类似
function getStudents(queryParamObject){
return $http.get(ENV_CONSTANTS.baseUrl+'/students', { params : queryParamObject });
}
恕我直言,url 建筑(baseUrl + "/my-suffix")的设计不错。
查询参数构建是。 $http.get
可以拍一张地图:
$http.get(myUrl, { params : myParamMap })
即:
$http.get(myUrl, { params : { valid : true, departmentId : "myDepId" } });
这让参数构建更容易、更漂亮
您还可以预先生成 url 常量:
var STUDENT_URL = ENV_CONSTANTS.baseUrl+'/students';
避免在每个方法中构建 url
$http.get(STUDENT_URL, { params : myParams });
哪个更易于维护
然后你可以因式分解:
function performStudentCall(paramMap) {
return $http.get(STUDENT_URL, { params : paramMap });
}
能够调用:
function getValidStudentByDepartment (departmentId) {
return performStudentCall({ valid : true, departmentId : departmentId });
}
这里每个操作都有一个服务方法,这是正确的方法,同时只保留一个方法来执行所有 http 调用。