Uma das coisas mais poderosas do Shopify Flow é a utilização a ação Send Http request, que permite fazer requisições e chamadas para qualquer serviço externo.
Embora a maioria dos endpoints REST modernos aceite nativamente um payload utilizando JSON quando utilizamos métodos de criação ou atualização como POST
ou PUT
, alguns ainda trabalham aceitando content types
mais clássicos.
Bem comum, o application/x-www-form-urlencoded
nada mais é que o envio do body do payload num formato estruturado que lembra muito a forma como enviamos query string. Por exemplo, se você precisa enviar um payload que contenha nome
e email
nesse content type, o payload seria assim.
nome=Leo+Hackin&[email protected]
Note que entre Leo
e Hackin
na variável nome
existe um sinal de +
: esse é o simbolo que o encoding de url entende como espaço
. Em algumas APIs e CLIs, essa conversão será feita automaticamente, mas se quiser garantir, você pode fazer isso do seu lado. Praticamente toda linguagem moderna já tem esses parsers. ;)
Vamos usar de exemplo novamente a API de envio de whatsapp do Twillio. Nas docs você irá ver o envio dos parâmetros da seguinte forma.
curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json" \
--data-urlencode "Body=This is the ship that made the Kessel Run in fourteen parsecs?" \
--data-urlencode "From=+15017122661" \
--data-urlencode "To=+15558675310" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN
As entradas --data-urlencode
instruem o cURL a enviar esses dados no encoding application/x-www-form-urlencoded
para o destino. O Twillio só aceitará a requisição assim e caso seja enviado de outra forma, um erro de Bad Request (status 400) será retornado, pois a entrada esperada está incorreta ou faltando. Algo como o erro abaixo:
{
"code":21211,
"message":"The 'To' number whatsapp: 15558675310 is not a valid phone number.",
"more_info":"https://www.twilio.com/docs/errors/21211",
"status":400
}
Na verdade o que aconteceu aqui é que o Twillio não entendeu a entrada, já que ele espera o conteúdo do POST
naquele formato que falei lá em cima.
Para resolver isso, envie o body
do conector com o formato variavel1=valor&variavel2=valor
sempre utilizando o caracter &
(e comercial) como separador de variáveis. E informe nos headers
o parâmetro Content-Type
com o valor application/x-www-form-urlencoded
.
Nosso envio pelo conector fica assim então:

E pronto: você agora pode enviar conteúdo em form encoded para seus endpoints. :)
Namastê!