[javascript] AngularJS $ http 및 $ resource

전화를 걸고 싶은 웹 서비스가 있습니다. $resource또는 $http어떤 것을 사용해야합니까?

$resource: https://docs.angularjs.org/api/ngResource/service/$resource

$http: https://docs.angularjs.org/api/ng/service/$http

위의 두 API 페이지를 읽은 후에는 길을 잃었습니다.

차이점이 무엇이고 어떤 상황에서 사용해야하는지 일반 영어로 설명해 주시겠습니까? 이러한 호출을 구조화하고 결과를 js 객체로 올바르게 읽는 방법은 무엇입니까?



답변

$http범용 AJAX입니다. 대부분의 경우 이것이 당신이 사용할 것입니다. 으로 $http당신이 만드는거야 GET, POST, DELETE유형은 수동으로 호출하고 처리들은 자신의 수익 객체.

$resource$httpRESTful 웹 API 시나리오에서 사용하기 위해 랩 합니다.


매우 일반적 : 편안한 웹 서비스는 방법이 좋아 HTTP를 기반으로 데이터 유형과 다른 일을하는 데이터 유형에 대한 하나의 엔드 포인트와 서비스가 될 것입니다 GET, POST, PUT, DELETE, 등 그래서이 함께 $resource, 당신이 호출 할 수 있습니다 GET리소스를 얻을 수 JavaScript 객체로 변경 한 다음을 사용하여 다시 보내 POST거나로 삭제하십시오 DELETE.

… 그렇다면 말이됩니다.


답변

다른 답변은 정확하지만 질문의 근본을 설명하지 못한다고 생각합니다. REST 의 하위 집합입니다 HTTP. 를 통해 수행 할 수 있습니다이 방법의 모든 것을 REST통해 수행 할 수 있습니다 HTTP통해 할 수있는 모든 있지만 HTTP통해 수행 할 수 있습니다 REST. 이것이 내부적으로 $resource사용 되는 이유 $http입니다.

그래서 언제 서로를 사용해야합니까?

필요한 모든 것 REST, 즉 RESTful웹 서비스 에 액세스하려는 경우 $resource해당 웹 서비스와 상호 작용하기가 매우 쉬워집니다.

대신 RESTful웹 서비스 가 아닌 모든 것에 액세스하려고하면와 가야합니다 $http. RESTful를 통해 웹 서비스에 액세스 할 수도 있습니다.를 사용하는 $http것보다 훨씬 번거로울 것입니다 $resource. 이것은 대부분의 사람들이 jQuery.ajax(Angular와 동등한)을 사용하여 AngularJS 외부에서 수행 한 방식 $http입니다.


답변

$http범용 AJAX 호출을 작성합니다. 일반적으로 RESTful api plus Non-RESTful을 포함 할 수 있음을 의미합니다. api를 .

그리고 $resource그것을 위해 전문 의 RESTful 부분.

편안한 API프로그래머가 구성하는 임의의 URL 대신 URL이 더 잘 구성되어 있기 때문에 최근 몇 년 동안 가 널리 보급되었습니다.

RESTful API 를 사용 하여 URL을 구성하면 다음과 같습니다./api/cars/:carId .

$resource 데이터를 가져 오는 방법

angular.module('myApp', ['ngResource'])

    // Service
    .factory('FooService', ['$resource', function($resource) {
        return $resource('/api/cars/:carId')
    }]);

    // Controller
    .controller('MainController', ['FooService', function(FooService){
        var self = this;
        self.cars = FooService.query();
        self.myCar = FooService.get('123');

    }]);

이것은 당신에게 줄 것이다 자원 객체 와 동반, get, save, query, remove,delete 자동 방법을.

$http 데이터를 가져 오는 방법

angular.module('myApp', [])

    // Service
    .factory('FooService', ['$http', function($http){
        return {
            query: function(){
                return $http.get('/api/cars');
            },

            get: function(){
                return $http.get('/api/cars/123');
            }
            // etc...
        }

RESTFul API 에서 각 공통 작업을 정의하는 방법을 참조하십시오 . 또 하나 개의 차이는 있습니다 $http반환 promise동안 $resource반환하는 객체입니다. Angular가 restangular 와 같은 RESTFul API를 처리하는 데 도움이되는 타사 플러그인도 있습니다


경우 API는 같은 것입니다 /api/getcarsinfo. 우리에게 남은 것은 모두 사용하는 것 $http입니다.


답변

나는 대답이 더 사람에 따라 생각 코드를 작성하는 시점에 있습니다. 필요한 이유를 알 때까지 Angular를 처음 사용하는 $http경우 사용하십시오 $resource. 당신은 방법의 구체적인 경험이있을 때까지 $http당신을 들고있다, 당신은 사용의 의미 이해 $resource코드 로, 스틱 $http.

이것은 내 경험이었습니다. 첫 번째 Angular 프로젝트를 시작했고 RESTful 인터페이스에 HTTP 요청을해야했기 때문에 지금하는 것과 동일한 조사를 수행했습니다. 이와 같은 SO 질문에서 읽은 토론을 바탕으로와 함께 선택했습니다 $resource. 이것은 내가 취소 할 수있는 실수였습니다. 이유는 다음과 같습니다.

  1. $http예제는 풍부하고 도움이되며 일반적으로 필요한 것입니다. 명확한 $resource예는 드물며 (내 경험상) 거의 모든 것이 필요하지 않습니다. Angular 초보자에게는 문서에 대해 수수께끼를 풀고 도움이되는 유용한 $resource예를 찾을 수 없다는 화가 나올 때까지 선택의 의미를 알지 못합니다 .
  2. $http아마 당신이 찾고있는 일대일 정신지도입니다. 당신이 가진 것을 이해하기 위해 새로운 개념을 배울 필요가 없습니다 $http. $resource아직 정신지도가없는 많은 뉘앙스를 가져옵니다.
  3. 새로운 개념을 배울 필요가 없다고 말했습니까? 각도 초보자로서 당신은 약속에 대해 배울 수있다. $http약속을 반환하고 .then가능하므로 Angular와 약속에 대해 배우는 새로운 것들과 잘 맞습니다. $resource직접 약속을 반환하지 않는 앵귤러 기본에 대한 잠정적 인 이해가 복잡해집니다.
  4. $resourceRESTful CRUD 호출 코드와 입력 및 출력 변환을 압축하기 때문에 강력합니다. $http자신 의 결과를 처리하기 위해 반복적으로 코드를 작성하는 데 어려움이 있다면 좋습니다 . 다른 사람 $resource에게는 혼란스러운 구문과 매개 변수 전달의 암호화 계층을 추가합니다.

저는 3 개월 전에 저를 알고 있었으면 좋겠다고 강조했습니다. ” $http아이와 함께하십시오 . 괜찮습니다.”


답변

$ resource는 객체 또는 배열이 원시 문자열이 아닌 서버의 응답으로 예상된다는 것을 강조하는 것이 중요하다고 생각합니다. 따라서 원시 문자열 (또는 객체 및 배열을 제외한 모든 것)을 응답으로 사용하는 경우 $ http를 사용해야합니다


답변

사이는 선택 올 때 $http또는 $resource이 본질적으로 더 정답이없는 모두 같은 행동을 할 것입니다 기술적으로 말하기.

의 목적은 $resource당신이 매개 변수의 값과 함께 템플릿 문자열 (자리 표시자를 포함 된 문자열을) 통과 할 수 있도록하는 것입니다. 템플릿 문자열 $resource자리 표시자를 개체로 전달되는 매개 변수 값으로 바꿉니다. URL을 정의하기 위해 유사한 원칙을 사용하므로 RESTFul 데이터 소스와 상호 작용할 때 주로 유용합니다.

어떤 $http일은 비동기 HTTP 요청을 수행하는 것입니다.


답변

자원 서비스는 REST APSI 작업에 유용한 서비스입니다. 그것을 사용할 때 CRUD 메소드를 작성하지 않습니다 (생성, 읽기, 업데이트 및 삭제)

내가 아는 한, 자원 서비스는 지름길입니다 .http 서비스로 무엇이든 할 수 있습니다.