Test API dengan Curl

Kali ini saya akan share cara test API dengan curl dan shell script.

Untuk API-nya, kita akan menggunakan API dari restfull-booker . Silahkan cek dokumentasinya sebelum mengikut tutorial ini.

Kita akan membuat tutorial ini seolah-olah seperti API “beneran”, untuk output dari curl akan kita buat “cantik” dengan menggunakan jq

  1. Mendapatkan token untuk otentikasi

    curl -s -X POST \
    https://restful-booker.herokuapp.com/auth \
    -H 'Content-Type: application/json' \
    -d '{
    "username" : "admin",
    "password" : "password123"
    }' | jq
    
    Create Token

    Create Token

    Untuk mendapatkan value dari token saja gunakan (ini bakal kita gunakan nanti di shell script)

    curl -s -X POST \
    https://restful-booker.herokuapp.com/auth \
    -H 'Content-Type: application/json' \
    -d '{
    "username" : "admin",
    "password" : "password123"
    }' |  jq -r '.token'
    #outpunya hanya d4aebae5dd25ebd
    
  2. Kita buat booking ID

    curl -s -X POST \
    https://restful-booker.herokuapp.com/booking \
    -H 'Content-Type: application/json' \
    -d '{
    "firstname" : "Anyong",
    "lastname" : "Haseo",
    "totalprice" : 111,
    "depositpaid" : true,
    "bookingdates" : {
        "checkin" : "2022-11-04",
        "checkout" : "2022-12-25"
    },
    "additionalneeds" : "Breakfast"
    }'
    
    Create Booking

    Create Booking

    Untuk mendapat booking id saja, gunakan

    curl -s -X POST \
    https://restful-booker.herokuapp.com/booking \
    -H 'Content-Type: application/json' \
    -d '{
    "firstname" : "Anyong",
    "lastname" : "Haseo",
    "totalprice" : 111,
    "depositpaid" : true,
    "bookingdates" : {
        "checkin" : "2022-11-04",
        "checkout" : "2022-12-25"
    },
    "additionalneeds" : "Breakfast"
    }' | jq -r '.bookingid'
    
  3. Check booking ID (bookingid)

    curl -s -X GET \
    "https://restful-booker.herokuapp.com/booking/14153" | jq
    
    Check Booking

    Check Booking

  4. Update booking ID, kita update “additional need” dari breakfast ke king size bed

    curl -s -X PUT \
    https://restful-booker.herokuapp.com/booking/1 \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'Cookie: token=abc123' \
    -d '{
    "firstname" : "Anyong",
    "lastname" : "Haseo",
    "totalprice" : 112,
    "depositpaid" : true,
    "bookingdates" : {
    "checkin" : "2022-11-04",
    "checkout" : "2022-12-25"
    },
    "additionalneeds" : "King Size Bed"
    }'
    
    Update Booking

    Update Booking

  5. Delete booking ID

    curl -s -X DELETE \
    https://restful-booker.herokuapp.com/booking/14153 \
    -H 'Content-Type: application/json' \
    -H 'Cookie: token=d4aebae5dd25ebd'
    
    Delete Booking

    Delete Booking

Buat Otomatisasi dengan Shell Script

Buka editor kamu, copy script di bawah ini


#!/bin/bash

USER="admin"
PASS="password123"

BOOKING_FIRSTNAME="anyong"
BOOKING_LASTNAME="haseo"
BOOKING_TOTALPRICE="111"
BOOKING_DEPOSITPAID="true"
BOOKING_CHECKIN="2022-11-04"
BOOKING_CHECKOUT="2022-11-29"
BOOKING_ADDITIONALNEEDS="breakfast"
UPDATE_BOOKING_ADDITIONALNEEDS="king size bed"


#make json output using jo
JSON_AUTH=$( jo "username=$USER" "password=$PASS" )

JSON_BOOKING_DATA=$( jo -p "firstname=$BOOKING_FIRSTNAME" "lastname=$BOOKING_LASTNAME" \
            "totalprice=$BOOKING_TOTALPRICE" "depositpaid=$BOOKING_DEPOSITPAID" \
            "bookingdates[checkin]=$BOOKING_CHECKIN" "bookingdates[checkout]=$BOOKING_CHECKOUT" \
            "additionalneeds=$BOOKING_ADDITIONALNEEDS")

JSON_UPDATE_BOOKING_DATA=$( jo -p "firstname=$BOOKING_FIRSTNAME" "lastname=$BOOKING_LASTNAME" \
            "totalprice=$BOOKING_TOTALPRICE" "depositpaid=$BOOKING_DEPOSITPAID" \
            "bookingdates[checkin]=$BOOKING_CHECKIN" "bookingdates[checkout]=$BOOKING_CHECKOUT" \
            "additionalneeds=$UPDATE_BOOKING_ADDITIONALNEEDS")

#GET auth token
GET_TOKEN=`(curl -s -X POST \
    https://restful-booker.herokuapp.com/auth \
    -H 'Content-Type: application/json' \
    -d "$JSON_AUTH" | jq -r '.token')`

echo token: $GET_TOKEN

#GET bookingid
GET_BOOKING_ID=`(curl -s -X POST \
    "https://restful-booker.herokuapp.com/booking" \
    -H 'Content-Type: application/json' \
    -d "$JSON_BOOKING_DATA" \
    | jq -r '.bookingid')`

echo bookingid: $GET_BOOKING_ID

#GET booking data
GET_BOOKING_DATA=`(curl -s -X GET \
    "https://restful-booker.herokuapp.com/booking/$GET_BOOKING_ID" | jq)`

echo -e "booking data:\n $GET_BOOKING_DATA"

COOKIE_HEADER=(-H "Content-Type: application/json" -H "Cookie: token=${GET_TOKEN}" )

#UPDATE booking data
UPDATE_BOOKING_DATA=`(curl -s -X PUT \
    "https://restful-booker.herokuapp.com/booking/$GET_BOOKING_ID" \
    "${COOKIE_HEADER[@]}" \
    -d "$JSON_UPDATE_BOOKING_DATA")`

#GET updated booking data
GET_UPDATE_BOOKING_DATA=`(curl -s -X GET \
    "https://restful-booker.herokuapp.com/booking/$GET_BOOKING_ID" | jq)`

echo -e "update booking data:\n $GET_UPDATE_BOOKING_DATA"
# echo $JSON_TOKEN
# echo -e "$UPDATE_BOOKING_DATA"

# echo ${COOKIE_HEADER[@]}
# # echo ${HEADERS[@]}

#DELETE booking data
#try using URL in variable
#it was cleaner
URL="https://restful-booker.herokuapp.com/booking/$GET_BOOKING_ID"

curl "${COOKIE_HEADER[@]}" -X DELETE "$URL"
Script Result

Script Result

References:

Stackoverflow - How to use shell variable for headers of curl command


Jika kamu merasa tulisan ini bermanfaat & membantu kamu, kamu bisa berdonasi lewat saweria

If you feel this website help you, you can donate at saweria