Sample code for 30+ languages & platforms
PureBasic

curl with Variable Substitution in a GraphQL Request Body

See more CURL Examples

This example shows how to use variables inside a graphql request body using the {{variable_name}} syntax. When the HTTP request’s Content-Type indicates graphql, Chilkat automatically applies proper escaping to each substituted value, ensuring the resulting graphql remains valid.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkHttpCurl.pb"

Procedure ChilkatExample()

    success.i = 0

    success = 0

    ; Variable names are enclosed between {{ and }}
    ; Important: Variables should be placed inside the quotes.

    ; curl -X POST https://api.example.com/graphql \
    ;   -H "Content-Type: application/graphql; charset=utf-8" \
    ;   -H "Accept: application/json" \
    ;   --data-binary "mutation {
    ;   createUser(
    ;     input: {
    ;       name: \"{{name}}\"
    ;       city: \"{{city}}\"
    ;       note: \"{{note}}\"
    ;       bio: \"{{bio}}\"
    ;     }
    ;   ) {
    ;     id
    ;     name
    ;   }
    ; }"

    ; Build the above curl command.
    sbCurl.i = CkStringBuilder::ckCreate()
    If sbCurl.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckAppendLn(sbCurl,"curl -X POST https://api.example.com/graphql \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -H " + Chr(34) + "Content-Type: application/graphql; charset=utf-8" + Chr(34) + " \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -H " + Chr(34) + "Accept: application/json" + Chr(34) + " \")
    CkStringBuilder::ckAppendLn(sbCurl,"  -d " + Chr(34) + "mutation {")
    CkStringBuilder::ckAppendLn(sbCurl,"  createUser(")
    CkStringBuilder::ckAppendLn(sbCurl,"    input: {")
    CkStringBuilder::ckAppendLn(sbCurl,"      name: \" + Chr(34) + "{{name}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"      city: \" + Chr(34) + "{{city}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"      note: \" + Chr(34) + "{{note}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"      bio: \" + Chr(34) + "{{bio}}\" + Chr(34))
    CkStringBuilder::ckAppendLn(sbCurl,"    }")
    CkStringBuilder::ckAppendLn(sbCurl,"  ) {")
    CkStringBuilder::ckAppendLn(sbCurl,"    id")
    CkStringBuilder::ckAppendLn(sbCurl,"    name")
    CkStringBuilder::ckAppendLn(sbCurl,"  }")
    CkStringBuilder::ckAppendLn(sbCurl,"}" + Chr(34))

    curl.i = CkHttpCurl::ckCreate()
    If curl.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Provide values for variables
    CkHttpCurl::ckSetVar(curl,"name","José O'Connor")
    CkHttpCurl::ckSetVar(curl,"city","München")
    CkHttpCurl::ckSetVar(curl,"note","He said " + Chr(34) + "Hello, world!" + Chr(34) + " — and left…")
    CkHttpCurl::ckSetVar(curl,"bio","Loves sushi, café visits, and π ≈ 3.14159")

    ; To demonstrate how the variables are replaced, this example does not execute the curl command. 
    ; Instead, it generates the raw HTTP request that would be sent if the curl command were run.
    sbRawRequest.i = CkStringBuilder::ckCreate()
    If sbRawRequest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttpCurl::ckToRawRequest(curl,CkStringBuilder::ckGetAsString(sbCurl),sbRawRequest)
    If success = 0
        Debug CkHttpCurl::ckLastErrorText(curl)
        CkStringBuilder::ckDispose(sbCurl)
        CkHttpCurl::ckDispose(curl)
        CkStringBuilder::ckDispose(sbRawRequest)
        ProcedureReturn
    EndIf

    Debug CkStringBuilder::ckGetAsString(sbRawRequest)

    ; The output is shown below.
    ; Notice the quote chars around "Hello, world!" are properly escaped.

    ; POST /graphql HTTP/1.1
    ; Accept: application/json
    ; Host: api.example.com
    ; Content-Type: application/graphql; charset=utf-8
    ; Content-Length: 250
    ; 
    ; mutation {
    ;   createUser(
    ;     input: {
    ;       name: "José O'Connor"
    ;       city: "München"
    ;       note: "He said \"Hello, world!\" — and left…"
    ;       bio: "Loves sushi, café visits, and π ≈ 3.14159"
    ;     }
    ;   ) {
    ;     id
    ;     name
    ;   }
    ; }


    CkStringBuilder::ckDispose(sbCurl)
    CkHttpCurl::ckDispose(curl)
    CkStringBuilder::ckDispose(sbRawRequest)


    ProcedureReturn
EndProcedure