Skip to main content

HTTP counter

View this sample's code on GitHub

Overview

The example demonstrates a counter dapp and an HTTP interface. It is essentially an iteration on the counter canister which adds native HTTP interfaces.

This sample dapp provides an interface that exposes the following methods:

  • http_request, which can:
    • GET some static gziped data if gzip is accepted.
    • GET the counter otherwise.
    • Refer POSTs to call http_request_update.
    • Returns 400 for all other requests.
  • http_request_update, which can:
    • POST to increment the counter.
      • returning some static gziped data if gzip is accepted.
      • otherwise return the new counter value.
    • Returns 400 for all other requests.

Prerequisites

This example requires an installation of:

  • Install the IC SDK.

  • Clone the example dapp project: git clone https://github.com/dfinity/examples

Begin by opening a terminal window.

Step 1: Navigate into the folder containing the project's files and start a local instance of the Internet Computer with the command:

cd examples/motoko/http_counter
dfx start --background

Step 2: Deploy the canister:

dfx deploy

Step 3: Take note of the canister ID to form URLs at which the http_counter is accessible.

CANISTER_ID=$(dfx canister id http_counter)

echo "http://localhost:4943/?canisterId=$CANISTER_ID"

echo "http://$CANISTER_ID.localhost:4943/"

Step 4: All functionality of the canister can be exercised with the following commands:

CANISTER_ID=$(dfx canister id http_counter)

# Get the counter
curl "$CANISTER_ID.localhost:4943/" --resolve "$CANISTER_ID.localhost:4943:127.0.0.1"

# Get the static gzipped query content
curl --compressed "$CANISTER_ID.localhost:4943/" --resolve "$CANISTER_ID.localhost:4943:127.0.0.1"

# Increment the counter
curl -X POST "$CANISTER_ID.localhost:4943/" --resolve "$CANISTER_ID.localhost:4943:127.0.0.1"

# Increment the counter and get the static gzipped update content
curl --compressed -X POST "$CANISTER_ID.localhost:4943/" --resolve "$CANISTER_ID.localhost:4943:127.0.0.1"

Security considerations and best practices

If you base your application on this example, we recommend you familiarize yourself with and adhere to the security best practices for developing on the Internet Computer. This example may not implement all the best practices.

For example, the following aspect is particularly relevant for this app: