flotiq graphql
#网络开发人员 #database #graphql #headlesscms

FLOTIQ API支持GraphQl查询。这是REST API获取数据的另一种方法。我们提供完整的,始终最新 graphQl的数据描述以及了解您的内容对象的GraphQl查询的端点。

什么是GraphQl?

GraphQl是API的查询语言。它旨在使API比REST API更灵活 - 这全都是为客户提供他们要求的数据。开发人员可以使用单个API调用。

flotiq中的GraphQl

系统支持内容对象的GraphQl查询。允许您以GraphQQL方式与系统交互的端点是:

  • GET /api/graphql/schema-获取GraphQl架构,
  • POST /api/graphql-执行graphql查询。

验证

要验证GraphQl查询,您需要使用Flotiq Dashboard中可用的一个应用程序API键。

与整个Flotiq API一样,您可以通过以下方式传递API键:

  • X-AUTH-TOKEN标头
  • auth_token查询参数

注意
如果您需要有关如何获取API密钥以及如何使用它的更多信息,请转到API access & scoped keys page

GraphQl API端点对于用户定义(scoped)API键不可用。

获取GraphQL模式

要获取完整的GraphQL模式来描述您的数据,您必须调用GET端点。它描述了当前内容类型定义的形状,包括属性类型,所需字段和关系。

请求

curl -X GET 'https://api.flotiq.com/api/graphql/schema' --header 'X-AUTH-TOKEN: YOUR_API_TOKEN'

响应

200好

正确格式化时返回

type Query {
    category(id: String!): category
    categoryList(page: Int, limit: Int, order_by: String, order_direction: String, filter: String): [category]
    product(id: String!): product
    productList(page: Int, limit: Int, order_by: String, order_direction: String, filter: String): [product]
    _media(id: String!): _media
    _mediaList(page: Int, limit: Int, order_by: String, order_direction: String, filter: String): [_media]
}

"""Auto generated Headless CMS type: _media"""
type _media {
    id: String
    url: String
    size: Float
    type: String
    width: Float
    height: Float
    source: String
    fileName: String
    mimeType: String
    extension: String
    externalId: String
}

"""Auto generated Headless CMS type: category"""
type category {
    id: String
    name: String
    description: String
}

"""Auto generated Headless CMS type: product"""
type product {
    id: String
    name: String
    slug: String
    price: Float
    categories: [category]
    description: String
    productImage: [_media]
    productGallery: [_media]
}

执行GraphQl查询

要对对象进行查询,您需要调用POST /api/graphql GraphQl端点。我们可以指定两种类型的查询 - 负责检索单个对象并列出对象。

查询单个对象

要获得单个对象,您需要传递要在响应中接收的对象标识符和字段。示例查询GraphQl语言以获取具有ID product-1的产品的id和标题,看起来像:

GraphQl

query {
    products(id:"product-1") {
        id
        title
    }
}

要将此查询传递给Flotiq,您需要致电:

请求

curl -X POST 'https://api.flotiq.com/api/graphql' \
    --header 'X-AUTH-TOKEN: YOUR_API_TOKEN' \
    --header 'Content-Type: application/json' \
    --data-raw '{"query":"query{products(id:\"product-1\"){id,title,}}"}'
Response

200好

{
    "data": {
        "products": {
            "id": "product-1",
            "title": "Green Tea"
        }
    }
}

列表对象
在列出对象时,您可以使用可选参数pagelimit,order_by,order_direction,filter

Param name and description table

GraphQl

query {
    productsList(limit: 2, order_by: "title", order_direction: "asc") {
        id
        title
    }
}

要将此查询传递给Flotiq,您需要致电:

请求

curl -X POST 'https://api.flotiq.com/api/graphql' \
    --header 'X-AUTH-TOKEN: YOUR_API_TOKEN' \
    --header 'Content-Type: application/json' \
    --data-raw '{"query":"query {productsList(limit: 2, order_by: \"title\", order_direction: \"desc\") {id, title}}"}'

响应
200好

{
  "data": {
    "productsList": [
      {
        "id": "product-3",
        "title": "Rooibos"
      },
      {
        "id": "product-2",
        "title": "Earl Grey"
      }
    ]
  }
}

关系解决(水合)

GraphQLS灵活性还涵盖对象关系(例如产品具有类别)。在flotiq中,相关对象是根据DataSource的类型自动解决的。

例如,当我们有一个产品对象时:

{
   "id":"product-1",
   "categories":[
      {
         "dataUrl":"/api/v1/content/categories/",
         "type":"internal"
      }
   ]
}

和类别:

{
   "id": "category-1",
   "name": "Tea"
}

用于列表对象的GraphQl查询(包括类别)看起来像:

GraphQl

query {
    productsList(limit: 1) {
        id
        title
        categories {
            id
            name
        }
    }   
}

请求

curl --request POST \
    --url 'https://api.flotiq.com/api/graphql?auth_token=__YOUR_AUTH_TOKEN__' \
    --header 'content-type: application/json' \
    --data '{"query":"query{productsList(limit:1){id,title,categories{id,name}}}"}'

响应
200好
将自动返回自动解决关系:

{
    "data": {
        "productsList": [
            {
                "id": "product-3",
                "title": "Rooibos",
                "categories": [
                    {
                        "id": "category-1",
                        "name": "Tea"
                    }
                ]
            }
        ]
    }
}

您可以看到,相关元素category被获取,包括其属性。

使用失眠客户端探索

GraphQl查询可能很复杂。为了有效地与FlotiQ GraphQl API进行交互,我们建议您使用诸如失眠之类的应用。它有助于根据您当前的模式创建自动完成的查询,验证输入并显示响应的预览。

使用端点https://api.flotiq.com/api/graphql?auth_token=YOUR_AUTH_TOKEN:

Insomnia REST Client查询示例查询

Insomnia Flotiq