Fetch data
GET requests
To make a GET request, first build a RestOptions object and then use the Amplify.API.get api to issue the request:
void getTodo() {    RestOptions options = RestOptions.builder()        .addPath("/todo")        .build();
    Amplify.API.get(options,        restResponse -> Log.i("MyAmplifyApp", "GET succeeded: " + restResponse),        apiFailure -> Log.e("MyAmplifyApp", "GET failed.", apiFailure)    );}private fun getTodo() {    val request = RestOptions.builder()        .addPath("/todo")        .build()
    Amplify.API.get(request,        { Log.i("MyAmplifyApp", "GET succeeded: $it") },        { Log.e("MyAmplifyApp", "GET failed.", it) }    )}private suspend fun getTodo() {    val request = RestOptions.builder()        .addPath("/todo")        .build()
    try {        val response = Amplify.API.get(request)        Log.i("MyAmplifyApp", "GET succeeded: ${response.data}")    } catch (error: ApiException) {        Log.e("MyAmplifyApp", "GET failed", error)    }}void getTodo() {    RestOptions options = RestOptions.builder()        .addPath("/todo")        .build();
    RxAmplify.API.get(options)        .subscribe(            restResponse -> Log.i("MyAmplifyApp", "GET succeeded: " + restResponse),            apiFailure -> Log.e("MyAmplifyApp", "GET failed.", apiFailure)        );}Accessing query parameters & body in Lambda proxy function
To learn more about Lambda Proxy Integration, please visit Amazon API Gateway Developer Guide.
If you are using a REST API which is generated with Amplify CLI, your backend is created with Lambda Proxy Integration, and you can access your query parameters & body within your Lambda function via the event object:
exports.handler = function(event, context, callback) {    console.log(event.queryStringParameters);    console.log('body: ', event.body);}Alternatively, you can update your backend file which is located at amplify/backend/function/[your-lambda-function]/app.js with the middleware:
const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware');app.use(awsServerlessExpressMiddleware.eventContext());Accessing Query Parameters with Serverless Express
In your request handler use req.apiGateway.event or req.query:
app.get('/todo', function(req, res) {  const query = req.query;  // or  // const query = req.apiGateway.event.queryStringParameters  res.json({    event: req.apiGateway.event, // to view all event data    query: query  });});Then you can use query parameters in your path as follows:
RestOptions options = RestOptions.builder()    .addPath("/todo")    .addQueryParameters(Collections.singletonMap("q", "test"))    .build();
Amplify.API.get(options,    response -> Log.i("MyAmplifyApp", "GET succeeded: " + response),    error -> Log.e("MyAmplifyApp", "GET failed.", error));val request = RestOptions.builder()    .addPath("/todo")    .addQueryParameters(mapOf("q" to "test"))    .build()
Amplify.API.get(request,    { Log.i("MyAmplifyApp", "GET succeeded: $it") },    { Log.e("MyAmplifyApp", "GET failed", it) })val request = RestOptions.builder()    .addPath("/todo")    .addQueryParameters(mapOf("q" to "test"))    .build()
try {    val response = Amplify.API.get(request)    Log.i("MyAmplifyApp", "GET succeeded: $response.")} catch (error: ApiException) {    Log.e("MyAmplifyApp", "GET failed", error)}RestOptions options = RestOptions.builder()    .addPath("/todo")    .addQueryParameters(Collections.singletonMap("q", "test"))    .build();
RxAmplify.API.get(options)    .subscribe(        response -> Log.i("MyAmplifyApp", "GET succeeded: " + response),        error -> Log.e("MyAmplifyApp", "GET failed.", error)    );