Samouczek schematuLekcja 26: Filtrowanie danych z zewnętrznego API
Lekcja 26: Filtrowanie danych z zewnętrznego API
Jeśli zewnętrzne API nie pozwala na filtrowanie według określonej właściwości, której potrzebujemy, możemy użyć Gato GraphQL, aby iterować po wpisach w odpowiedzi API i usunąć te, które nie spełniają naszego warunku.
Odwołajmy się ponownie do endpointu REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, gdzie niektórzy użytkownicy mają pustą właściwość url:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]Poniższe zapytanie GraphQL filtruje użytkowników, których właściwość url jest pusta, poprzez:
- Pobranie danych z zewnętrznego API
- Iterację po wpisach za pomocą
@underEachArrayItemi umieszczenie każdego wpisu w zmiennej dynamicznej$userDataEntry - Wyodrębnienie właściwości
urlz każdego wpisu i umieszczenie tej wartości w zmiennej dynamicznej$websiteURL - Sprawdzenie, czy ta wartość jest pusta, i przypisanie wyniku do zmiennej dynamicznej
$isWebsiteURLEmpty - Zastosowanie dyrektywy warunkowej
@if, która — jeśli$isWebsiteURLEmptyma wartośćtrue— ustawia wartość tego wpisu jakonull - Wykonanie dyrektywy
@arrayFilterw celu odfiltrowania wszystkich wpisównull
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
}Odpowiedź to:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}