Resource request from Android applications

improve this page | report issue

Overview

MobileFirst applications can access resources using the WLResourceRequest REST API.
The REST API works with all adapters and external resources.

Prerequisites:

WLResourceRequest

The WLResourceRequest class handles resource requests to adapters or external resources.

Create a WLResourceRequest object and specify the path to the resource and the HTTP method.
Available methods are: WLResourceRequest.GET, WLResourceRequest.POST, WLResourceRequest.PUT, WLResourceRequest.HEAD and WLResourceRequest.DELETE.

URI adapterPath = URI.create("/adapters/JavaAdapter/users");
WLResourceRequest request = new WLResourceRequest(adapterPath,WLResourceRequest.GET);
  • For JavaScript adapters, use /adapters/{AdapterName}/{procedureName}
  • For Java adapters, use /adapters/{AdapterName}/{path}. The path depends on how you defined your @Path annotations in your Java code. This would also include any @PathParam you used.
  • To access resources outside of the project, use the full URL as per the requirements of the external server.
  • timeout: Optional, request timeout in milliseconds
  • scope: Optional, if you know which scope is protecting the resource - specifying this scope could make the request more efficient.

Sending the request

Request the resource by using the .send() method. Specify a WLResponseListener class instance:

request.send(new WLResponseListener(){
  public void onSuccess(WLResponse response) {
    Log.d("Success", response.getResponseText());
  }
  public void onFailure(WLFailResponse response) {
    Log.d("Failure", response.getResponseText());
  }
});

Parameters

Before sending your request, you may want to add parameters as needed.

Path parameters

As explained above, path parameters (/path/value1/value2) are set during the creation of the WLResourceRequest object:

URI adapterPath = new URI("/adapters/JavaAdapter/users/value1/value2");
WLResourceRequest request = new WLResourceRequest(adapterPath,WLResourceRequest.GET);

Query parameters

To send query parameters (/path?param1=value1...) use the setQueryParameter method for each parameter:

request.setQueryParameter("param1","value1");
request.setQueryParameter("param2","value2");

JavaScript adapters

JavaScript adapters use ordered nameless parameters. To pass parameters to a Javascript adapter, set an array of parameters with the name params:

request.setQueryParameter("params","['value1', 'value2']");

This should be used with WLResourceRequest.GET.

Form parameters

To send form parameters in the body, use .send(HashMap<String, String> formParameters, WLResponseListener) instead of .send(WLResponseListener):

HashMap formParams = new HashMap();
formParams.put("height", height.getText().toString());
request.send(formParams, new MyInvokeListener());

Parameters - JavaScript adapters

JavaScript adapters use ordered nameless parameters. To pass parameters to a Javascript adapter, set an array of parameters with the name params:

formParams.put("params", "['value1', 'value2']");

This should be used with WLResourceRequest.POST.

Header parameters

To send a parameter as an HTTP header use .addHeader() API:

request.addHeader("date", date.getText().toString());

Other custom body parameters

  • .send(requestBody, WLResponseListener listener) allows you to set an arbitrary String in the body.
  • .send(JSONStore json, WLResponseListener listener) allows you to set an arbitrary dictionary in the body.
  • .send(byte[] data, WLResponseListener listener) allows you to set an arbitrary byte array in the body.

The response

The response object contains the response data and you can use its methods and properties to retrieve the required information. Commonly used properties are responseText (String), responseJSON (JSON Object) (if the response is in JSON) and status (Int) (the HTTP status of the response).

Use the WLResponse response and WLFailResponse response objects to get the data that is retrieved from the adapter.

Using WLResourceRequest to access external microservices

The WLResourceRequest API can be used to allow mobile apps access to microservices hosted outside of Mobile Foundation. Mobile Foundation facilitates secure calls to microservice or enterprise backend service without involving adapters through Mobile Foundation API Connector. The API Connector, like an adapter, ensures secure invocations based on Mobile Foundation’s OAuth 2.0 mechanism. With API Connector, Mobile Foundation administrator can configure and deploy microservice or enterprise backend service details in Mobile Foundation. The deployed configuration is used by Mobile Foundation runtime to securely call microservice or backend service requests from the mobile app.

Learn how to configure Mobile Foundation API Connector.

To access a microservice URL such as “http://mybluemix.net/resorts/cities” and the Mobile Foundation runtime backend service is configured as follows

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

WLResourceRequest can be defined as

WLResourceRequest request = new WLResourceRequest(url,WLResourceRequest.GET, backendServiceName, timeout);
  • url : Relative URL of the microservice endpoint. For example : cities
  • method : HTTP method to use. For example : WLResourceRequest.GET
  • backendServiceName : Name of the backend service configured on server to fetch data from. For example, resorts.
  • timeout : The timeout in milliseconds for this request.
var request = new WLResourceRequest('cities',
  	WLResourceRequest.GET,'resorts',3000);

For more information

For more information about WLResourceRequest, refer to the API Reference.

Image of the sample application

Sample application

The ResourceRequestAndroid project contains a native Android application that makes a resource request using a Java adapter.
The adapter Maven project contains the Java adapter used during the resource request call.

Click to download the Android project.
Click to download the adapter Maven project.

Sample usage

Follow the sample’s README.md file for instructions.

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 July 02, 2020