Şema eğitimi
Şema eğitimiDers 26: Harici bir API'den veri filtreleme

Ders 26: Harici bir API'den veri filtreleme

Harici API, ihtiyacımız olan belirli bir özelliğe göre filtrelemeye izin vermiyorsa, API yanıtındaki girişleri yinelemek ve koşulumuzu karşılamayanları kaldırmak için Gato GraphQL'i kullanabiliriz.

Bazı kullanıcıların url özelliğinin boş olduğu REST API endpoint'i olan newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url adresine yeniden başvuralım:

[
  {
    "id": 1,
    "name": "leo",
    "url": "https://leoloso.com"
  },
  {
    "id": 7,
    "name": "Test",
    "url": ""
  },
  {
    "id": 2,
    "name": "Theme Demos",
    "url": ""
  }
]

Aşağıdaki GraphQL query'si, url özelliği boş olan kullanıcıları şu adımlarla filtreler:

  • Harici API'den veri alma
  • @underEachArrayItem aracılığıyla girişleri yineleme ve her girişi $userDataEntry dinamik değişkenine yerleştirme
  • Her girişten url özelliğini çıkarma ve bu değeri $websiteURL dinamik değişkenine yerleştirme
  • Bu değerin boş olup olmadığını kontrol etme ve sonucu $isWebsiteURLEmpty dinamik değişkenine atama
  • $isWebsiteURLEmpty değeri true ise o girişin değerini null olarak ayarlayan koşullu @if direktifini uygulama
  • Tüm null girişleri filtrelemek için @arrayFilter direktifini çalıştırma
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
}

Yanıt şudur:

{
  "data": {
    "usersWithWebsiteURL": [
      {
        "id": 1,
        "name": "leo",
        "url": "https://leoloso.com"
      }
    ]
  }
}