Tutorial do schemaLição 26: Filtrando dados de uma API externa
Lição 26: Filtrando dados de uma API externa
Se a API externa não permite filtrar por uma determinada propriedade que precisamos, podemos usar o Gato GraphQL para iterar sobre as entradas na resposta da API e remover aquelas que não satisfazem nossa condição.
Vamos nos referir novamente ao endpoint da REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, onde alguns usuários têm a propriedade url vazia:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]A query GraphQL abaixo filtra os usuários cuja propriedade url está vazia, através de:
- Recuperação de dados da API externa
- Iteração sobre as entradas via
@underEachArrayItem, e posicionamento de cada entrada na variável dinâmica$userDataEntry - Extração da propriedade
urlde cada entrada, e posicionamento desse valor na variável dinâmica$websiteURL - Verificação se esse valor está vazio, e atribuição do resultado na variável dinâmica
$isWebsiteURLEmpty - Aplicação da diretiva condicional
@ifque, se$isWebsiteURLEmptyfortrue, define o valor dessa entrada comonull - Execução da diretiva
@arrayFilterpara filtrar todas as entradasnull
query {
usersWithWebsiteURL: _sendJSONObjectCollectionHTTPRequest(
input: {
url: "https://newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url"
}
)
# Remove users without a website URL
@underEachArrayItem(
passValueOnwardsAs: "userDataEntry"
affectDirectivesUnderPos: [1, 2, 3]
)
@applyField(
name: "_objectProperty"
arguments: {
object: $userDataEntry
by: {
key: "url"
}
}
passOnwardsAs: "websiteURL"
)
@applyField(
name: "_isEmpty"
arguments: {
value: $websiteURL
}
passOnwardsAs: "isWebsiteURLEmpty"
)
@if(
condition: $isWebsiteURLEmpty
)
@setNull
@arrayFilter
}A resposta é:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}