Strapi 之API详述

葛鸿轩
2023-12-01

API的使用

REST API允许通过API端点访问 content-types 。当一个内容类型被创建时,Strapi会自动创建API端点。在查询API端点时,可以使用API参数来细化结果。可以理解为,对于每一个 content-types ,系统默认生成以下API。

Method

URL

描述

GET

/api/:pluralApiId

获取一个实体的列表

POST

/api/:pluralApiId

创建一个实体

GET

/api/:pluralApiId/:documentId

获取一个指定ID的实体

PUT

/api/:pluralApiId/:documentId

更新实体

DELETE

/api/:pluralApiId/:documentId

删除实体

举例如下:

Method

URL

描述

GET

/api/restaurants

获取餐厅列表

POST

/api/restaurants

创建餐厅

GET

/api/restaurants/:id

获取特定餐厅

DELETE

/api/restaurants/:id

删除餐厅

PUT

/api/restaurants/:id

更新餐厅

请求的Requests:

请求将返回一个响应对象,该对象通常包括以下key。
data:响应数据本身,可以是。

  • 一个单一的实体,包含以下key。
    • id :number
    • attributes: 响应实体,包含实体内的所有key
    • meta(object):
    • error(object,可选):关于请求所抛出的任何错误的信息。

API参数详述

以下参数可用于API查询,包括过滤、排序、分页等等

  • sort :排序操作,举例如下:
const qs = require('qs');
const query = qs.stringify({
  sort: ['title', 'slug'],
}, {
  encodeValuesOnly: true, // prettify URL
});

await request(`/api/articles?${query}`);
  • filters: 过滤操作,注意使用的示例
const qs = require('qs');
const query = qs.stringify({
  filters: {
    username: {
      $eq: 'John',
    },
  },
}, {
  encodeValuesOnly: true, // prettify URL
});

await request(`/api/users?${query}`);
  • populate

在 Strapi 提供的 API 中,Population 是一种用于在返回结果中获取关联模型数据的方法。简单来说,Population 可以让你在查询一个模型时,同时返回与之关联的另一个模型的数据。

举个例子,假设你有两个模型,一个是 User,另一个是 Post,它们之间是一对多的关系,即一个用户可以拥有多个文章。如果你只查询 User 模型,你只会得到用户的基本信息,例如姓名、电子邮件地址等。但是,如果你使用 Population,在查询用户信息的同时,还可以获取与该用户相关的所有文章信息。

具体实现方式是通过在查询中使用 populate 关键字来指定要获取的关联模型名称,例如:

bashCopy code
GET /users?populate=posts

这将返回一个包含所有用户信息及其所有文章信息的 JSON 对象。

Population 在查询关联模型数据时非常有用,可以减少 API 调用次数,提高数据获取效率。它还可以简化前端代码,因为前端不需要执行多个 API 调用来获取相关数据。

  • Fields

在Strapi中,字段(Fields)是定义模型中的属性和其类型的基本单元。在Strapi中创建模型时,我们可以为模型添加多个字段,每个字段代表模型中的一个属性,例如标题、内容、作者等。

使用Strapi提供的API,我们可以访问模型的数据,并使用字段来指定要获取的特定属性。通过使用Fields,可以轻松地从模型中选择要检索的特定属性,以便可以在API响应中获得更细粒度的数据。例如,如果只想获取标题和作者属性,可以在API请求中使用Fields指定这些属性,而不是获取模型中的所有属性。

假设我们有一个名为“文章”的模型,其中包含标题、作者、内容和创建日期等属性。现在,我们想要使用Strapi API来检索文章数据,但只需要获取标题和创建日期属性。

在这种情况下,我们可以在API请求中使用Fields来指定要检索的属性,如下所示:

bashCopy code
http://localhost:1337/articles?_fields=title,created_at

通过使用_fields参数,我们可以将要获取的属性指定为逗号分隔列表。在上面的示例中,我们将title和created_at指定为要获取的属性,因此API响应将只包含这两个属性的数据。

另外,如果我们想要建立“文章”模型与“作者”模型之间的关系,我们可以使用关联字段类型。例如,我们可以在“文章”模型中添加一个名为“author”的字段,并将其类型设置为“关联”。然后,我们可以将“作者”模型与“文章”模型关联起来,并在API响应中返回相关的作者数据。

  • pagination: 查询属性

const qs = require('qs');
const query = qs.stringify({
  pagination: {
    page: 1,
    pageSize: 10,
  },
}, {
  encodeValuesOnly: true, // prettify URL
});

await request(`/api/articles?${query}`);

  • publicationState: 选择发布和草稿功能

在Strapi中,每个内容类型都有一个名为publicationState的字段。这个字段允许在发布(published)和草稿(draft)之间切换。默认情况下,publicationState字段的值为“published”,这意味着该内容已经发布并可以公开访问。

当需要对内容进行编辑或更新时,可以将publicationState字段的值更改为“draft”,以便进行修改并在准备好发布时再次将其更改为“published”。

此外,publicationState字段可以用于访问Strapi的API时对内容进行过滤。例如,可以通过查询具有特定发布状态的内容来获取已发布或草稿状态的内容。例如,可以使用以下查询获取所有已发布的文章:

GET /articles?publicationState=published

或者,可以使用以下查询获取所有草稿文章:

GET /articles?publicationState=draft

因此,publicationState字段可以帮助管理内容的发布和编辑,以及在使用Strapi的API时对内容进行过滤。

 类似资料: