如何使用可选的查询参数为REST服务设计角度服务类

时间:2015-12-01 15:57:53

标签: angularjs angular-services

我有一个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);
         }
    }

但我觉得这不是一个好的设计,因为对于每个查询参数或查询参数的组合我需要创建一个方法。任何人都可以建议一个正确的方法吗?

2 个答案:

答案 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 });
}