2015-12-01 2 views
0

У меня есть служба REST, которая возвращает всех студентов.Как создать угловой класс обслуживания для службы 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

URL-адрес здания (BaseUrl + "/ мой-суффикс") не плохой дизайн IMHO.

Строка запроса параметров. $http.get может взять карту для этого:

$http.get(myUrl, { params : myParamMap }) 

IE:

$http.get(myUrl, { params : { valid : true, departmentId : "myDepId" } }); 

Это позволит строительный параметр проще и симпатичнее

Вы можете также предварительно генерирует свой адрес константы:

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-вызовов.

+0

Спасибо за ваше время и информацию. Итак, если paramMap имеет значение null, он будет автоматически проигнорирован? – DRB

+0

Я бы сказал, да, но вы можете пожаробезопасность в executeStudentCall, чтобы убедиться, что paramMap! = Null, чтобы быть уверенным –

1

Вы можете создать функцию и передать объект param запроса с парой значений поля в параметре функции.

что-то вроде

function getStudents(queryParamObject){ 
      return $http.get(ENV_CONSTANTS.baseUrl+'/students', { params : queryParamObject }); 
} 
+0

Криш побил меня на него. Единственное, что я предлагаю, это сделать конечную точку, учащиеся в этом случае, обязательным параметром функции. –