lexiphanic/doctrine-rest-driver

Doctrine DBAL 的 RESTful API 驱动程序

2.2.3 2016-04-14 14:21 UTC

This package is not auto-updated.

Last update: 2024-09-17 10:26:20 UTC


README

CircleOfNice DoctrineRestDriver 是我所需解决方案的一个很好的起点,但我发现了一些错误,因此自然地试图修复它们,但发现难以遵循且有些令人困惑,所以最终将其拆解以 A) 修复错误,B) 学习更多关于 Doctrine DBAL 的知识。

先决条件

  • 此仓库,最好通过 composer
  • PHP 5.5 或更高版本

安装

使用 composer 将驱动程序添加到您的项目中

composer require lexiphanic/doctrine-rest-driver

更改以下 doctrine dbal 配置条目

doctrine:
    dbal:
        connections:
            foo:
                driver_class: "Lexiphanic\\DoctrineRestDriver\\Driver"
                options:
                    client: http.rest.location # Service for sending request, EG Guzzle
                    transformer: http.rest.mysql.transformer # Service for transforming a query to Request

CircleOfNice 有许多选项允许您设置各种 CURL 选项,但这不是本项目关注的焦点。这也是为什么没有更多选项的原因。因此,如果您想更改请求、响应或转换器,则可以使用 Guzzle 中的中间件或创建自己的转换器。

用法

如果您的 API 路由遵循以下几个约定,使用该驱动程序非常简单

  • 每个路由都必须具有相同的结构:{guzzle base_uri}/{tableName}
  • 如果有 id 列,则将其附加为 {guzzle base_uri}/{tableName}/{id}
  • 如果响应是一个只包含数组的数组,例如 ['children'=>[children...], 'parents'=>[parents...]],则它被视为具有多行的结果,第 1 行是 children...,第 2 行是 parents...,依此类推;否则,它被视为单个结果集,例如 ['children'=>[...],'parents'=>[...]],'name'=>'...'(这是因为在名称不是数组的情况下)将返回一个具有 namechildrenparents 属性的行
  • 选择请求如下所示;
    • GET {guzzle base_uri}/{tableName}?foo=bar&bar(a,b)=foo 其中 SQL 为 SELECT ... FROM {tableName} WHERE foo = 'bar' AND bar(a,b) = 'foo'
    • GET {guzzle base_uri}/{tableName}/{id}?foo=bar 其中 SQL 为 SELECT ... FROM {tableName} WHERE foo = 'bar' AND id = {id};
  • 删除请求遵循与选择请求相同的约定,但当然使用 Delete 动词
  • 插入请求如下所示;
    • POST {guzzle base_uri}/{tableName} 请求体的内容将是 json 编码的 key => value 对(有关创建方式,请参阅选择请求的示例)
  • 更新请求与选择和插入请求类似,如下所示;
    • PUT {guzzle base_uri}/{tableName}/{id}?foo=bar URI 和查询字符串遵循与选择请求相同的约定,而正文将与插入请求相同
  • 如果 SQL 中存在以下内容,所有请求都将附加以下内容
    • LIMIT foo, bar 将附加 ?_offset=foo&limit=bar(《foo》和《bar》将转换为《int》)
    • ORDER BY foo, bar 将附加 ?_order=foo,bar

如果不是这种情况,您当然可以使用替代转换器、扩展此转换器或添加 Guzzle 中间件。