logo

Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

JSON:API 与核心 REST 模块对比

04/09/2025, by Ivan

要点速览(TL;DR)

如果你需要暴露非实体(non-entity)数据,请选择 REST。其他情况下,选择 JSON:API。

更细化一些的说明:

  • 核心 REST 模块几乎允许做任何事情(任意格式、任意逻辑、任意 HTTP 方法),且可配置性极强。功能强大,但也更复杂,因此相对更脆弱。
  • JSON:API 专注于以一致的方式暴露 Drupal 的最大优势(实体/数据建模)。简单,但对大多数用例已足够强大。

特性对比矩阵

基于特性的高层对比:JSON:API 与 REST。
特性 JSON:API REST 备注
将实体作为资源暴露 ✔️ ✔️ REST:需要为每个实体类型单独配置。JSON:API:默认全部暴露。两者均会遵循实体访问控制。
将自定义数据作为资源暴露   ✔️ 需编写自定义 @RestResource 插件。JSON:API 仅支持实体。
获取单个资源 ✔️ ✔️  
获取资源列表 ✔️ 部分支持

REST:需要配置一个视图(View),并设置“REST export”显示。

资源列表分页 ✔️ 需要额外模块(例如 Pager Serializer)。 REST:不原生支持!REST export 视图会返回全部资源。
资源列表过滤 ✔️ 部分支持

REST:只有当你为每个字段及每一种可能的运算符都创建了公开过滤器(exposed filter)时才可行。

资源排序 ✔️    
包含/嵌入(includes/embedding) ✔️ 仅 HAL+JSON 支持  
不对字段值进行不必要的包装 ✔️   HAL 规范化与默认规范化(因此所有格式)都会暴露 Drupal 在内存中的 PHP 数据结构,给消费方带来不佳的开发体验(DX)。JSON:API 简化了单基数、单属性字段的规范化。
可省略消费者不需要的字段 ✔️    
一致的 URL ✔️    
客户端可发现可用的资源类型 ✔️    
与 Drupal 无关的响应结构 ✔️   REST:理论上 HAL 规范化不含 Drupal 特性,但实践中并非如此。
客户端库 ✔️    
可扩展规范 WIP    
零配置 ✔️   REST:每个 @RestResource 插件定义都可以被暴露,但必须配置后才会被暴露。你需要为每一项选择允许的格式、允许的认证提供者,必要时还要选择允许的 HTTP 方法。
JSON:API:所有实体自动暴露;遵循实体/字段访问控制;所有已安装的认证提供者都会自动被允许。

更多信息

参阅将 JSON:API 模块加入 Drupal 核心的理由以及模块架构的设计理由

文章来自 Drupal 文档