스키마 튜토리얼레슨 26: 외부 API에서 데이터 필터링하기
레슨 26: 외부 API에서 데이터 필터링하기
외부 API가 필요한 특정 속성으로 필터링을 허용하지 않는 경우, Gato GraphQL을 사용하여 API 응답의 항목들을 반복 처리하고 조건을 충족하지 않는 항목들을 제거할 수 있습니다.
REST API 엔드포인트 newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url을 다시 참조해 보겠습니다. 이 엔드포인트에서는 일부 사용자의 url 속성이 비어 있습니다:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]아래의 GraphQL 쿼리는 url 속성이 비어 있는 사용자를 필터링하여 제외합니다. 처리 절차는 다음과 같습니다:
- 외부 API에서 데이터를 가져옵니다
@underEachArrayItem을 사용하여 항목들을 반복 처리하고, 각 항목을 동적 변수$userDataEntry에 저장합니다- 각 항목에서
url속성을 추출하고, 해당 값을 동적 변수$websiteURL에 저장합니다 - 이 값이 비어 있는지 확인하고, 결과를 동적 변수
$isWebsiteURLEmpty에 할당합니다 - 조건 디렉티브
@if를 적용하여$isWebsiteURLEmpty가true인 경우 해당 항목의 값을null로 설정합니다 - 디렉티브
@arrayFilter를 실행하여 모든null항목들을 제외합니다
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
}응답은 다음과 같습니다:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}