causal/simple_api

服务,将 HTTP/REST 请求路由到您的 TYPO3 控制器。

安装: 450

依赖: 0

建议者: 0

安全: 0

星标: 4

关注者: 3

分支: 2

类型:typo3-cms-extension

1.0.0 2017-04-20 09:57 UTC

This package is auto-updated.

Last update: 2024-09-09 13:04:02 UTC


README

服务,将 HTTP/REST 请求路由到您的控制器。

注意:此扩展预期由 TYPO3 开发者使用,并作为路由请求到您自己的业务逻辑的中心枢纽。

功能

  • 支持认证方法调用
  • 支持本地化调用(考虑语言因素)
  • 支持缓存调用,并在您的 API 处理程序中透明访问 TYPO3 缓存框架
  • 如果存在头 HTTP_ACCEPT_ENCODING 并包含 gzip,则支持 gzip 负载
  • 支持动态生成您的 API 文档
  • 在 Backend 编辑记录时自动刷新缓存条目(在相应的标签列表中使用 <table-name>%<uid>

此外,此扩展还支持对您的 API 处理程序进行依赖注入,您只需使用 @inject 或以 inject 前缀的方法即可,就像使用 Extbase 编程时那样。

与 EXT:routing 的区别

EXT:routing 不同,此扩展不会强制您将 Extbase 控制器/操作映射到路由段,而是基本上允许您注册一个 "段"(通常是第一个段),然后会将整个请求简单地路由到您控制器中的 handle() 方法。

处理程序注册

首先,您应该在您的 ext_emconf.php 配置文件中添加一个依赖项,可以是实际约束,也可以是建议,具体取决于您的喜好

$EM_CONF[$_EXTKEY] = [
    // snip
    'constraints' => [
        'depends' => [
            'php' => '5.5.0-7.1.99',
            'typo3' => '7.6.0-8.99.99',
        ],
        'conflicts' => [],
        'suggests' => [
            'simple_api' => '',
        ],
    ],
];

然后在 ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['simple_api']['apiHandlers'][] = [
    'route' => '/some-route',
    'class' => \VENDOR\YourExt\Api\YourClass::class,
];

您可以注册一个模式而不是固定路由

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['simple_api']['apiPatternHandlers'][] = [
    'route' => '/members/\d+/history',
    'class' => \VENDOR\YourExt\Api\YourClass::class,
];

您的处理程序必须扩展 \Causal\SimpleApi\Controller\AbstractHandler

处理程序键

注册数组支持各种键

  • route [必填]: 要注册的路由。

  • class [必填]: 处理对应路由请求的类。

  • contentType [可选]: POST 请求接受的负载内容类型,将在调用处理程序之前自动解码。

  • methods [可选]: 处理程序接受的逗号分隔的 HTTP 方法列表(例如,“POST”)。默认为无限制。

  • restricted [可选]: API 调用是否期望经过认证的调用(使用 HTTP_X_AUTHORIZATION 头)。如果限制对 API 部分的访问,您必须注册一个名为 /authenticate 的路由,该路由将获取 HTTP_X_AUTHORIZATION 头,对其进行操作,并返回一个包含以下键的数组

    • success => true(或 false)。将作为 _authenticated 布尔标志传递给 API 处理程序
    • 自定义键将使用 _ 前缀,并按原样传递给 API 处理程序(例如,user 将成为 _user
    • 自定义布尔标志 demo 可用于指定认证成功但具有 "演示" 功能。您需要在 API 控制器中处理它,通过检查预期的布尔标志参数 _demo

    提示:如果存在 HTTP_X_AUTHORIZATION 头,即使没有明确标记处理程序为 "受限制的",也会进行认证并调用您的处理程序,无论调用结果如何。

  • 已弃用 [可选]: 标记相应路由在文档中为已弃用的布尔标志。

负载

以下规则适用于您从 API 处理程序返回的负载

  • 期望有效载荷是一个数组,并以application/json的内容类型返回。如果您想返回其他内容类型(如图像),您应在自己的API处理器中完成,然后调用exit()
  • 如果抛出异常,它将被捕获并封装成HTTP 500错误。唯一的例外是如果抛出异常\Causal\SimpleApi\Exception\ForbiddenException,则会抛出HTTP 403错误。
  • 如果没有找到处理器,将返回HTTP 404错误。

已知问题及解决方案

  • 可以在API处理器中使用Extbase存储库,但您需要从基类手动调用方法includeTCA(),以便返回的对象可以使用Extbase映射。此调用通常应作为您可以在处理器中重写的initialize()方法的一部分,该方法在调用handle()之前被调用。

    注意:如果您不正确地包含域模型的TCA,您可能会通过将不完整的映射定义存储到extbase_datamapfactory_datamap的缓存后端(例如,具有默认TYPO3设置的表cf_extbase_datamapfactory_datamap)来损坏Extbase数据映射缓存。在这种情况下,您需要手动刷新该缓存。

安装

  1. 将此存储库克隆到typo3conf/ext/simple_api

    cd /path/to/typo3conf/ext/
    git clone https://github.com/xperseguers/t3ext-simple_api.git simple_api
    

    或者,您可以通过composer加载它

    composer require causal/simple_api
    
  2. 转到扩展管理器并激活扩展simple_api

  3. 将重写规则添加到您的.htaccess文件中。例如,

    RewriteRule ^api/(.*)$ /index.php?eID=simple_api&route=$1 [QSA,L]
    

    或者,如果您正在使用Nginx

    rewrite ^/api/(.*)$ /index.php?eID=simple_api&route=$1 last;
    

    这将导致使用此扩展来处理以api/开头的请求。

提示:如果您需要支持本地化(&L=<some-language-uid>),则应将上述建议的路由更改为包括您网站的根页面UID(&id=<some-uid>)。这是必需的,因为在复杂环境中,本地化模式和默认语言可能不同,因此无法推断。