Next-Drupal 1.4

2022年6月14日 - @shadcn


四月份,我们发布了 next-drupal 1.3 以及 DrupalClient,一个功能强大且可定制的 JSON:API 客户端,用于从 Drupal 获取数据。

两个月过去了,DrupalClient 取得了成功。我们看到越来越多的新项目采用了 DrupalClient,从小型无头项目到大型品牌都在基于 next-drupal 进行构建。

我们的周下载量刚刚突破 1000+ 🎉。

今天,我们宣布发布 next-drupal 1.4,其中包含了稳定版 DrupalClient 和 JSON:API 的写入操作 (CRUD)

yarn add next-drupal@latest

DrupalClient 是一个增量升级。您可以安全地将您的网站升级到 next-drupal 1.4.0,没有任何重大更改。

特性

  1. DrupalClient 现已稳定并可用于生产环境
  2. JSON:API 的写入操作
  3. 支持更多身份验证方法
  4. 新的文档站点
  5. Umami 演示

DrupalClient 现已稳定并可用于生产环境

import { DrupalClient } from "next-drupal"
 
const drupal = new DrupalClient("https://example.com")
 
// Fetch articles.
const articles = await drupal.getResourceCollection("node--article")

我们已将 基本入门项目 升级为使用 DrupalClient


JSON:API 的写入操作

您现在可以使用 next-drupal 创建、更新、删除和获取 JSON:API 资源。

getResource

const article = await drupal.getResource(
  "node--article",
  "dad82fe9-f2b7-463e-8c5f-02f73018d6cb"
)

createResource

const article = await drupal.createResource("node--article", {
  data: {
    attributes: {
      title: "Title of Article",
      body: {
        value: "<p>Content of body field</p>",
        format: "full_html",
      },
    },
  },
})

createFileResource

const file = await drupal.createFileResource("file--file", {
  data: {
    attributes: {
      type: "media--image",
      field: "field_media_image",
      filename: "filename.jpg",
      file: await fs.readFile("/path/to/file.jpg"),
    },
  },
})

updateResource

const article = await drupal.updateResource(
  "node--article",
  "a937dd34-5407-4fff-8594-fccaaa5bb72a",
  {
    data: {
      attributes: {
        title: "Title of Article",
      },
    },
  }
)

deleteResource

const deleted = await drupal.deleteResource(
  "node--article",
  "a937dd34-5407-4fff-8594-fccaaa5bb72a"
)

支持更多身份验证方法

DrupalClient 支持多种身份验证类型。您可以使用 Bearer 令牌、Basic 令牌或提供您自己的授权标头。

现在可以在客户端全局设置身份验证,或者在每个方法中自定义设置。

客户端身份验证

设置将在客户端使用的全局身份验证。

import { DrupalClient } from "next-drupal"
 
export const drupal = new DrupalClient(
  process.env.NEXT_PUBLIC_DRUPAL_BASE_URL,
  {
    auth: // Configure the global auth here.
  }
)

方法身份验证

为每个方法调用提供自定义身份验证。

import { drupal } from "lib/drupal"
 
const userArticles = await drupal.getResourceCollection("node--article", {
  params: {
    "filter[uid]": user.id,
  },
  withAuth: // Set the custom auth here.
})

我们还添加了对 clientId/clientSecretusername/passwordcallback 和 **NextAuth.js** 身份验证方法的支持。


新的文档站点

文档站点已进行了升级。每个文档、指南和示例都已针对 DrupalClient 进行了重写。

我们还为每个方法添加了 API 参考和示例。

const resource = await drupal.getResource<T = JsonApiResource>(
  type,
  uuid,
  options?: {
    params,
    withAuth,
    deserialize,
    locale,
    defaultLocale,
    withCache,
  }
): Promise<T>
  • type: string
    • 必填
    • 资源类型。例如:node--articletaxonomy_term--tagsblock_content--basic
  • uuid: string
    • 必填
    • 资源的 ID。例如:15486935-24bf-4be7-b858-a5b2de78d09d
  • options
    • 可选
    • params: JsonApiParams: JSON:API 参数,例如 filterfieldsincludesort
    • withAuth: boolean | DrupalClientAuth:
      • 设置要使用的身份验证方法。请参阅 身份验证文档
      • 设置为 true 以使用在客户端配置的身份验证方法。
    • deserialize: boolean: 设置为 false 以返回原始 JSON:API 响应。
    • locale: string: 获取资源的语言环境。
    • defaultLocale: string: 站点的默认语言环境。
    • withCache: boolean: 如果您希望将资源存储到缓存并从缓存中检索,请设置 withCache
    • cacheKey: string: 要使用的缓存键。

您可以 在此处 找到旧的文档站点。


Umami 演示

我们使用 next-drupal 将 Umami 演示重建为一个无头站点

  • 翻译支持
  • 联系表单
  • 搜索
  • 身份验证
  • 通过 JSON:API 创建新文章
  • 使用 Tailwind CSS 重构样式
  • 💯 Lighthouse 分数

您可以在 此处 查看演示。


升级

您可以按照我们的升级指南 此处 立即试用新的 DrupalClient