Pagination

Whenever two objects have a one-to-many relationship, the respective field will be paginated using cursor-based, forward pagination.

As pagination is not yet fully implemented, all paginated fields will allow you to limit the returned items via the first argument. However it is not possible to set an offset.

To avoid breaking changes once pagination will be enabled, the respective pattern is already prepared and enforced.

Nodes and Edges

Objects that share a relationship within our API are referred to as nodes and their connections as edges. To enable pagination, a field representing a one-to-many relationship contains a single edges object, which in turn is a list of nodes. Each such node object represents a single related item.

According to this structure, you could query a list of similar products:

product(id: "8S-DEMO-Polohemd-1") {
   similarProducts {
      edges {
        node {
          id
        }
      }
    }
  }
}

The responding result will reflect the same structure:

{
  "data": {
    "product": {
      "similarProducts": {
        "edges": [
          {
            "node": {
              "id": "8S-DEMO-Polohemd-10"
            }
          },
          {
            "node": {
              "id": "8S-DEMO-Polohemd-9"
            }
          },
          ...,
          {
            "node": {
              "id": "8S-DEMO-Polohemd-6"
            }
          }
        ]
      }
    }
  }
}

Slicing

An optional parameter first can be used to limit the number of items returned in a result list.

The following query for example, would allow you to return only a single 8.SET Compose product set for a product with the SKU 123456-7890 in your catalogue:

product(id: "8S-DEMO-Polohemd-1") {
   similarProducts(first: 2) {
      edges {
        node {
          id
        }
      }
    }
  }
}

You can pass an arbitrary positive integer to the first argument. Bear in mind though, that the result will always be the same shape, even if you request a single item. So the above query would result in:

{
  "data": {
    "product": {
      "similarProducts": {
        "edges": [
          {
            "node": {
              "id": "8S-DEMO-Polohemd-10"
            }
          },
          {
            "node": {
              "id": "8S-DEMO-Polohemd-9"
            }
          }
        ]
      }
    }
  }
}

Last updated