내 angularjs 페이지에서 RESTful API의 서비스에 액세스하는 방법은 무엇입니까?


88

저는 angularJS를 처음 접했습니다. RESTful API에서 서비스에 액세스하는 것을 찾고 있지만 전혀 생각하지 못했습니다. 어떻게 할 수 있습니까?

답변:


145

옵션 1 : $ http 서비스

AngularJS는 사용자가 원하는 것을 정확히 수행 하는 $http서비스 를 제공합니다 . AJAX 요청을 웹 서비스에 보내고 JSON을 사용하여 데이터를 수신합니다 (REST 서비스와 통신하기에 완벽 함).

예제를 제공하려면 (AngularJS 문서에서 가져와 약간 조정 됨) :

$http({ method: 'GET', url: '/foo' }).
  success(function (data, status, headers, config) {
    // ...
  }).
  error(function (data, status, headers, config) {
    // ...
  });

옵션 2 : $ resource 서비스

AngularJS 에는보다 높은 수준의 방식으로 REST 서비스에 대한 액세스를 제공 하는 $resource서비스 인 또 다른 서비스가 있습니다 (AngularJS 문서에서 다시 가져온 예).

var Users = $resource('/user/:userId', { userId: '@id' });
var user = Users.get({ userId: 123 }, function () {
  user.abc = true;
  user.$save();
});

옵션 3 : Restangular

또한 Restangular 와 같은 타사 솔루션도 있습니다 . 사용 방법에 대한 설명서 를 참조하십시오 . 기본적으로 더 선언적이며 세부 사항을 더 추상화합니다.


1
여기서 도와 주 시겠어요? 나는 전혀 모른다. stackoverflow.com/questions/16463456/... . REST API에서 서비스를로드 할 수 없습니다. 빈 배열을 가져옵니다. 감사합니다
anilCSE 2013 년

@GoloRoden 나는 CORS를 다룰 때 각도에서 $ http.defaults.useXDomain = true를 사용하는 사람을 보았습니다. 정말로 그렇게해야합니까? 다른 도메인에서 laravel과 angular를 설정했기 때문입니다. angular의 http 요청으로 laravel 컨트롤러를 쳤습니다. $ http.defaults.useXDomain을 사용하든 사용하지 않든 상관없이 잘 작동합니다. 이것에 대한 논리적 설명이 있습니까?
under5hell


10

Angular의 멋진 세계에 오신 것을 환영합니다 !!

저는 angularJS를 처음 접했습니다. RESTful API에서 서비스에 액세스하는 것을 찾고 있지만 전혀 생각하지 못했습니다. 그렇게하도록 도와주세요. 감사합니다

현재 'GET'서비스를 사용하고 있다면 첫 번째 Angular 스크립트를 작성하는 데 두 가지 (매우 큰) 장애물이 있습니다.

첫째, 서비스는 "Access-Control-Allow-Origin"속성을 구현해야합니다. 그렇지 않으면 서비스가 웹 브라우저에서 호출 될 때 처리되지만 Angular에서 호출 될 때 비참하게 실패합니다.

따라서 web.config 파일에 몇 줄을 추가해야 합니다.

<configuration>
  ... 
  <system.webServer>
    <httpErrors errorMode="Detailed"/>
    <validation validateIntegratedModeConfiguration="false"/>
    <!-- We need the following 6 lines, to let AngularJS call our REST web services -->
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*"/>
            <add name="Access-Control-Allow-Headers" value="Content-Type"/>
        </customHeaders>
    </httpProtocol>
  </system.webServer>
  ... 
</configuration>

다음으로 Angular가 'GET'웹 서비스를 호출하도록하기 위해 HTML 파일에 약간의 코드를 추가해야합니다.

// Make sure AngularJS calls our WCF Service as a "GET", rather than as an "OPTION"
var myApp = angular.module('myApp', []);
myApp.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

이러한 수정 사항이 적용되면 실제로 RESTful API를 호출하는 것은 매우 간단합니다.

function YourAngularController($scope, $http) 
{
    $http.get('http://www.iNorthwind.com/Service1.svc/getAllCustomers')
        .success(function (data) {
        //  
        //  Do something with the data !
        //  
    });
}

이 웹 페이지에서 다음 단계에 대한 명확한 설명을 찾을 수 있습니다.

JSON 데이터와 함께 Angular 사용

행운을 빕니다 !

마이크


10
누군가가 자신의 웹 서비스를 인터넷에 완전히 개방하도록 장려하는 이유는 무엇입니까? 은 Access-Control-Allow-Origin당신이 API에 직면 공개 ... 아니라면 와일드 카드 않을 것입니다
데이브 매킨토시

7

$http여기 에서 (바로 가기 방법) 확장 하십시오 : http://docs.angularjs.org/api/ng.$http

// 페이지의 스 니펫

$http.get('/someUrl').success(successCallback);
$http.post('/someUrl', data).success(successCallback);

// 사용 가능한 바로 가기 방법

$http.get
$http.head
$http.post
$http.put
$http.delete
$http.jsonp

1
.success () 및 .error ()는 무시됩니다. 대신 .then () 및 .catch ()를 사용해야합니다.
Alter

0

예를 들어 json은 다음과 같습니다. { "id": 1, "content": "Hello, World!"}

다음과 같이 angularjs를 통해 액세스 할 수 있습니다.

angular.module('app', [])
    .controller('myApp', function($scope, $http) {
        $http.get('http://yourapp/api').
            then(function(response) {
                $scope.datafromapi = response.data;
            });
    });

그런 다음 HTML에서 다음과 같이 할 수 있습니다.

<!doctype html>
<html ng-app="myApp">
    <head>
        <title>Hello AngularJS</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
        <script src="hello.js"></script>
    </head>

    <body>
        <div ng-controller="myApp">
            <p>The ID is {{datafromapi.id}}</p>
            <p>The content is {{datafromapi.content}}</p>
        </div>
    </body>
</html>

다운로드하지 않으려는 경우 angularjs에 대한 CDN을 호출합니다.

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<script src="hello.js"></script>

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.