w3resource

Rust Program: Interacting with Web Service for Authentication & Data retrieval

Rust Error Propagation: Exercise-3 with Solution

Write a Rust program that interacts with a web service, performing authentication and data retrieval, propagating errors.

Sample Solution:

Rust Code:

use reqwest; // Import the reqwest crate for making HTTP requests
use std::error::Error; // Import the Error trait for error handling

// Function to perform authentication and retrieve data from the web service
fn retrieve_data(api_key: &str) -> Result> {
    // Construct the URL for the web service endpoint
    let url = format!("https://api.example.com/data?key={}", api_key);

    // Perform a GET request to the web service endpoint
    let response = reqwest::blocking::get(&url)?;

    // Check if the request was successful (status code 200 OK)
    if response.status().is_success() {
        let body = response.text()?; // Extract the response body as a string
        Ok(body) // Return the response body
    } else {
        Err(format!("Request failed with status code: {}", response.status()).into()) // Return an error message if the request was not successful
    }
}

fn main() -> Result<(), Box> {
    let api_key = "your_api_key_here"; // Replace "your_api_key_here" with your actual API key
    
    // Call the function to retrieve data from the web service
    match retrieve_data(api_key) {
        Ok(data) => println!("Received data: {}", data), // Print the received data if the request was successful
        Err(err) => eprintln!("Error retrieving data: {}", err), // Print an error message if the request failed
    }

    Ok(()) // Return Ok if the program completes successfully
}

Output:

Compiling playground v0.0.1 (/playground)
    Finished dev [unoptimized + debuginfo] target(s) in 2.78s
     Running `target/debug/playground`
Error retrieving data: error sending request for url (https://api.example.com/data?key=your_api_key_here): error trying to connect: dns error: failed to lookup address information: Temporary failure in name resolution.

Explanation:

Here is a brief explanation of the above Rust code:

  • First we use the "reqwest" crate to make HTTP requests to the web service.
  • The "retrieve_data()" function constructs the URL with the API key, performs a GET request to the web service endpoint, and returns the response body if the request is successful.
  • The "main()" function calls "retrieve_data()" with the API key and handles any errors during the process. If the retrieval is successful, it prints the received data; otherwise, it prints an error message. Finally, it returns an 'Ok' result if the program completes successfully.

Rust Code Editor:

Previous: Rust File Operations: Copy, Move, Delete with Error handling.
Next: Rust Configuration Parser: Apply Settings & Handle errors.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://www.w3resource.com/rust/error_handling/rust-error-propagation-exercise-3.php