iOS 애플리케이션에서 자원 요청

improve this page | report issue

개요

MobileFirst 애플리케이션은 WLResourceRequest REST API를 사용하여 자원에 액세스할 수 있습니다.
REST API는 모든 어댑터 및 외부 자원에서 작동합니다.

전제조건:

WLResourceRequest

WLResourceRequest 클래스는 어댑터 또는 외부 자원에 대한 자원 요청을 처리합니다.

WLResourceRequest 오브젝트를 작성하고 자원에 대한 경로 및 HTTP 메소드를 지정하십시오.
사용 가능한 메소드는 WLHttpMethodGet, WLHttpMethodPost, WLHttpMethodPutWLHttpMethodDelete입니다.

Objective-C

WLResourceRequest *request = [WLResourceRequest requestWithURL:[NSURL URLWithString:@"/adapters/JavaAdapter/users/"] method:WLHttpMethodGet];

Swift

let request = WLResourceRequestSwift(
    URL: URL(string: "/adapters/JavaAdapter/users"),
    method: WLResourceRequestSwift.WLHttpMethodGet
)
  • JavaScript 어댑터의 경우 /adapters/{AdapterName}/{procedureName}을 사용하십시오.
  • Java 어댑터의 경우 /adapters/{AdapterName}/{path}를 사용하십시오. path는 Java 코드로 @Path 어노테이션을 정의한 방식에 따라 다릅니다. 여기에는 사용한 @PathParam도 포함됩니다.
  • 프로젝트 외부의 자원에 액세스하려면 외부 서버의 요구사항에 따라 전체 URL을 사용하십시오.
  • 제한시간: 요청 제한시간(밀리초)이며 선택사항입니다.

요청 보내기

sendWithCompletionHandler 메소드를 사용하여 자원을 요청하십시오.
다음과 같이 완료 핸들러를 제공하여 검색된 데이터를 처리하십시오.

Objective-C

[request sendWithCompletionHandler:^(WLResponse *response, NSError *error) {
    if (error == nil){
        NSLog(@"%@", response.responseText);
    } else {
        NSLog(@"%@", error.description);
    }
}];

Swift

request.send() {(response, error) in
    if (error != nil){
        print("Failure: " , error!);
    }
    else if (response != nil){
        print("Success: " + response!.responseText);
    }
}

또는 sendWithDelegate를 사용하고 NSURLConnectionDataDelegateNSURLConnectionDelegate 프로토콜을 둘 다 준수하는 위임을 제공할 수 있습니다. 이렇게 하면 보다 세부적인 응답을 처리할 수 있습니다(예: 2진 응답 처리).

매개변수

필요한 경우 요청을 보내기 전에 매개변수를 추가할 수 있습니다.

경로 매개변수

위에서 설명한 대로 경로 매개변수(/path/value1/value2)는 WLResourceRequest 오브젝트 작성 중에 설정됩니다.

조회 매개변수

조회 매개변수(/path?param1=value1...)를 전송하려면 각 매개변수에 setQueryParameter 메소드를 사용하십시오.

Objective-C

[request setQueryParameterValue:@"value1" forName:@"param1"];
[request setQueryParameterValue:@"value2" forName:@"param2"];

Swift

request.setQueryParameterValue("value1", forName: "param1")
request.setQueryParameterValue("value2", forName: "param2")

JavaScript 어댑터

JavaScript 어댑터는 이름이 없는 정렬된 매개변수를 사용합니다. Javascript 어댑터에 매개변수를 전달하려면 params라는 이름을 사용하여 매개변수 배열을 설정하십시오.

Objective-C

[request setQueryParameterValue:@"['value1', 'value2']" forName:@"params"];

Swift

request.setQueryParameterValue("['value1', 'value2']", forName: "params")

이는 WLHttpMethodGet과 함께 사용해야 합니다.

양식 매개변수

본문에서 양식 매개변수를 보내려면 sendWithCompletionHandler 대신 sendWithFormParameters를 사용하십시오.

Objective-C

//@FormParam("height")
NSDictionary *formParams = @{@"height":@"175"};

//Sending the request with Form parameters
[request sendWithFormParameters:formParams completionHandler:^(WLResponse *response, NSError *error) {
    if (error == nil){
        NSLog(@"%@", response.responseText);
    } else {
        NSLog(@"%@", error.description);
    }
}];

Swift

//@FormParam("height")
let formParams = ["height":"175"]

//Sending the request with Form parameters
request.send(withFormParameters: formParams) {(response, error) in
    if (error != nil){
        print("Failure: " , error!);
    }
    else if (response != nil){
        print("Success: " + response!.responseText);
    }
}

JavaScript 어댑터

JavaScript 어댑터는 이름이 없는 정렬된 매개변수를 사용합니다. Javascript 어댑터에 매개변수를 전달하려면 params라는 이름을 사용하여 매개변수 배열을 설정하십시오.

Objective-C

NSDictionary *formParams = @{@"params":@"['value1', 'value2']"};

Swift

let formParams = ["params":"['value1', 'value2']"]

이는 WLHttpMethodPost와 함께 사용해야 합니다.

헤더 매개변수

매개변수를 HTTP 헤더로 보내려면 setHeaderValue API를 사용하십시오.

Objective-C

//@HeaderParam("Date")
[request setHeaderValue:@"2015-06-06" forName:@"birthdate"];

Swift

//@HeaderParam("Date")
request.setHeaderValue("2015-06-06", forName: "birthdate")

기타 사용자 정의 본문 매개변수

  • sendWithBody를 사용하여 본문에서 임의의 문자열을 설정할 수 있습니다.
  • sendWithJSON을 사용하여 본문에서 임의의 사전을 설정할 수 있습니다.
  • sendWithData를 사용하여 본문에서 임의의 NSData를 설정할 수 있습니다.

completionHandler 및 delegate에 대한 콜백 큐

응답 수신 중 UI 차단을 방지하기 위해 API의 sendWithCompletionHandlersendWithDelegate 세트에 대해 completionHandler 블록 또는 delegate를 실행하도록 개인용 콜백 큐를 지정할 수 있습니다.

Objective-C

//creating callback queue
dispatch_queue_t completionQueue = dispatch_queue_create("com.ibm.mfp.app.callbackQueue", DISPATCH_QUEUE_SERIAL);

//Sending the request with callback queue
[request sendWithCompletionHandler:completionQueue completionHandler:^(WLResponse *response, NSError *error) {
    if (error == nil){
        NSLog(@"%@", response.responseText);
    } else {
        NSLog(@"%@", error.description);
    }
}];

Swift

//creating callback queue
let completionQueue = DispatchQueue(label: "com.ibm.mfp.app.callbackQueue");

//Sending the request with callback queue
request.send(withQueue: queue){ (response, error) in
    if (error != nil){
        print("Failure: " , error!);
    }
    else if (response != nil){
        print("Success: " + response!.responseText);
    }
}

응답

response 오브젝트에는 응답 데이터가 포함되어 있으며 해당 메소드 및 특성을 사용하여 필수 정보를 검색할 수 있습니다. 일반적으로 사용되는 특성은 responseText(문자열), 응답이 JSON 형식인 경우 responseJSON(사전) 및 응답의 HTTP 상태인 status(정수)입니다.

responseerror 오브젝트를 사용하여 어댑터에서 검색되는 데이터를 가져오십시오.

WLResourceRequest를 사용하여 외부 마이크로서비스에 액세스

WLResourceRequest API를 사용하면 모바일 앱이 Mobile Foundation 외부에서 호스팅되는 마이크로서비스에 액세스할 수 있습니다. Mobile Foundation은 Mobile Foundation API Connector를 통해 어댑터를 사용하지 않고도 마이크로서비스 또는 엔터프라이즈 백엔드 서비스에 대한 보안 호출을 용이하게 합니다. 어댑터와 같은 API Connector는 Mobile Foundation의 OAuth 2.0 메커니즘을 기반으로 보안 호출을 보장합니다. Mobile Foundation 관리자는 API Connector를 사용하여 Mobile Foundation에서 마이크로서비스 또는 엔터프라이즈 백엔드 서비스 세부사항을 구성하고 배치할 수 있습니다. 배치된 구성은 Mobile Foundation 런타임에서 모바일 앱의 마이크로서비스 또는 백엔드 서비스 요청을 안전하게 호출하는 데 사용됩니다.

Mobile Foundation API Connector 구성 방법에 대해 알아보십시오.

microservice URL(예: http://mybluemix.net/resorts/cities)에 액세스하려고 하고 Mobile Foundation 런타임 백엔드 서비스가 다음과 같이 구성되어 있으면

{
  "service": "resorts",
  "baseUrl":"http://mybluemix.net/resorts"
}

WLResourceRequest는 다음과 같이 정의할 수 있습니다.

Objective-C

WLResourceRequest *request = [WLResourceRequest requestWithURL:[NSURL URLWithString@"url"] method:WLHttpMethodGet backendServiceName timeout];

Swift

let request = WLResourceRequestSwift(
    url: URL(),
    method: WLResourceRequestSwift.WLHttpMethodGet,
    backendServiceName: ,
    timeout
)
  • url : 마이크로서비스 엔드포인트의 상대 URL. 예: cities
  • method : 사용할 HTTP 메소드. 예: WLResourceRequest.GET
  • backendServiceName : 데이터를 페치하기 위해 서버에 구성된 백엔드 서비스 이름. 예: resorts.
  • timeout : 이 요청의 제한시간(밀리초).

Objective-C

WLResourceRequest* request = [WLResourceRequest requestWithURL:@"cities" method:WLHttpMethodGet backendServiceName:@"resorts" timeout:3000]

Swift

let request = WLResourceRequestSwift(
    url: URL(string: "/cities"),
    method: WLResourceRequestSwift.WLHttpMethodGet,
    backendServiceName: "resorts" ,
    timeout: 3000
)

자세한 정보

WLResourceRequest에 대한 자세한 정보는 API 참조를 참조하십시오.

샘플 애플리케이션 이미지

샘플 애플리케이션

ResourceRequestSwift 프로젝트에는 Swift에서 구현되며 Java 어댑터를 사용하여 자원 요청을 작성하는 iOS 애플리케이션이 포함되어 있습니다.
어댑터 Maven 프로젝트에는 자원 요청 호출 중에 사용되는 Java 어댑터가 포함되어 있습니다.

iOS 프로젝트를 다운로드하려면 클릭하십시오.
어댑터 Maven 프로젝트를 다운로드하려면 클릭하십시오.

샘플 사용법

샘플의 README.md 파일에 있는 지시사항을 따르십시오.

iOS 9에 대한 참고사항:

Xcode 7은 ATS(Application Transport Security)를 기본적으로 사용합니다. 학습서를 완료하려면 ATS를 사용 안함으로 설정하십시오(자세히 보기).

  1. Xcode에서 [프로젝트]/info.plist 파일 → 다른 이름으로 열기 → 소스 코드를 마우스 오른쪽 단추로 클릭하십시오.
  2. 다음을 붙여넣으십시오.
     <key>NSAppTransportSecurity</key>
     <dict>
           <key>NSAllowsArbitraryLoads</key>
           <true/>
     </dict>
Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.
Last modified on June 29, 2020