Requests

HTTP

With Grillon, you can easily chain calls to configure and send HTTP requests and reuse the same client for a given base api URL.

#[tokio::test]
async fn test_get_jsonplaceholder() -> Result<()> {
    let grillon = Grillon::new("https://jsonplaceholder.typicode.com")?;

    grillon
        .get("posts?id=1")
        .assert()
        .await
        .json_path("$[0].id", is(json!(1)));

    grillon
        .get("posts?id=2")
        .assert()
        .await
        .json_path("$[0].id", is(json!(2)));

    Ok(())
}

Methods

Each method in this list has its corresponding lowercase function:

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE
  • OPTIONS
  • CONNECT
  • HEAD

Headers

Grillon supports two different types to configuring http request headers:

  • HeaderMap
  • Vec<(HeaderName, HeaderValue)>
let grillon = Grillon::new("https://jsonplaceholder.typicode.com")?;

// Vec<(HeaderName, HeaderValue)>
let request = grillon
    .post("posts")
    .payload(json!({
        "title": "foo",
        "body": "bar",
        "userId": 1
    }))
    .headers(vec![(
        CONTENT_TYPE,
        HeaderValue::from_static("application/json"),
    )]);

// Override with HeaderMap
let mut header_map = HeaderMap::new();
header_map.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
let request = request.headers(header_map);

Payload

At the moment, Grillon only supports the application/json content type. It will then be extended with different content types such as multipart/form-data, application/x-www-form-urlencoded, text/plain or text/html.

Json

Grillon re-exports serde_json::Value type to make it easier to add a json body. You can also use the json! macro.

Grillon::new("https://jsonplaceholder.typicode.com")?;
    .post("posts")
    .payload(json!({
        "title": "foo",
        "body": "bar",
        "userId": 1
    }))
    .assert()
    .await;

Build a custom request

If for some reasons you need a more programmatic way to create your http requests, you can use the http_request function:

Grillon::new("https://jsonplaceholder.typicode.com")?
    .http_request(Method::POST, "posts")
    .assert()
    .await
    .status(is_success());