klapuch / nette-rest-route

Nette 框架的 Rest 路由

3.0.0 2016-02-17 14:23 UTC

This package is auto-updated.

Last update: 2024-09-14 10:04:47 UTC


README

Build Status

自动将 CRUD 映射到定义的模块中的 Presenters 和动作。并创建在 Presenter 中可访问的参数。

  • 格式
  • id(自动检测)
  • 关联(关联数组)
  • 数据(请求的原始数据)
  • 查询(查询字符串中的项目数组)

格式检测

变量 $format 从 HTTP 头 Accept 中检测。如果头不存在,Route 将尝试从 URL 中检测格式(例如 .../foo.json)。如果 URL 中没有格式,Route 将使用默认格式 json

安装

安装 Nette-RestRoute 的最佳方式是使用 Composer

$ composer require klapuch/nette-rest-route

用法

use Klapuch\RestRoute;

// $router is an instance of Nette\Application\Routers\RouteList  

// No parameters needed. Presenter name will be generated.
$router[] = new RestRoute;

// With module.
$router[] = new RestRoute('Api');

// With module and xml as a default format.
$router[] = new RestRoute('Api', 'xml');

第一个参数是路由将发送请求的模块的名称。将生成 URL 前缀。见示例。####示例

NULL      => /<generated presenter name>
'Api'     => /api/<generated presenter name>
'My:Api'  => /my/api/<generated presenter name>
...

第二个参数是默认格式。默认情况下,默认格式为 json。RestRoute 仅支持 2 种格式

  • json (默认)
  • xml

示例

读取所有

URL: /api/users\ApiModule\UsersPresenter::actionReadAll
HTTP 头部 Accept: application/json
方法: GET
请求体: 空白
参数

format = json
associations = array(0)
data = ""
query = array(0)

标志 readAll 已删除,如果 URL 中未找到资源 ID,则 Route 将自动生成动作 readAll

按资源 ID 读取

URL: /api/users/123\ApiModule\UsersPresenter::actionRead
HTTP 头部 Accept: application/json
方法: GET
请求体: 空白
参数

format = json
id = 123
associations = array(0)
data = ""
query = array(0)

查询参数

URL: /api/users?foo=bar&page=1\ApiModule\UsersPresenter::actionReadAll
HTTP 头部 Accept: application/json
方法: GET
请求体: 空白
参数

format = json
associations = array(0)
data = ""
query = array(
	foo => "bar"
	page => 1
)

创建

URL: /api/users\ApiModule\UsersPresenter::actionCreate
HTTP 头部 Accept: application/json
方法: POST
请求体

{
	"foo": "bar",
	"nested": {
		"foo": "bar"	
	}
}

参数

format = json
associations = array(0)
data = {"foo": "bar", "nested": {"foo": "bar"}}
query = array(0)

更新

URL: /api/users/123\ApiModule\UsersPresenter::actionUpdate
HTTP 头部 Accept: application/json
方法: PUT
请求体

{
	"foo": "bar",
	"nested": {
		"foo": "bar"	
	}
}

参数

format = json
id = 123
associations = array(0)
data = {"foo": "bar", "nested": {"foo": "bar"}}
query = array(0)

部分更新

URL: /api/users/123\ApiModule\UsersPresenter::actionPartialUpdate
HTTP 头部 Accept: application/json
方法: PATCH
请求体

{
	"foo": "bar",
	"nested": {
		"foo": "bar"	
	}
}

参数

format = json
id = 123
associations = array(0)
data = {"foo": "bar", "nested": {"foo": "bar"}}
query = array(0)

删除

URL: /api/users/123\ApiModule\UsersPresenter::actionDelete
HTTP 头部 Accept: application/json
方法: DELETE
请求体: 空白
参数

format = json
id = 123
associations = array(0)
data = ""
query = array(0)

选项

有关 OPTIONS 文档的更多信息,请参阅 w3.org

URL: /api/users\ApiModule\UsersPresenter::actionOptions
HTTP 头部 Accept: application/json
方法: OPTIONS
请求体: 空白
参数

format = json
associations = array(0)
data = ""
query = array(0)

关联

点号之前的最后一个项目(对)是主资源。点号之前的一切都是关联(apigee.com)。

URL: /api/users/1/comments\ApiModule\CommentsPresenter::actionRead|actionCreate|actionUpdate|actionDelete
HTTP 头部 Accept: application/json
方法: GET, POST, PUT, DELETE
请求体: 空白
参数

format = json
associations = array(
	users => 1
)
data = ""
query = array(0)

URL: /api/users/123/comments/456\ApiModule\CommentsPresenter::actionRead|actionCreate|actionUpdate|actionDelete
HTTP 头部 Accept: application/json
方法: GET, POST, PUT, DELETE
请求体: 空白
参数

format = json
id = 456
associations = array(
	users => 123
)
data = ""
query = array(0)

URL: /api/users/1/blogs/2/comments\ApiModule\CommentsPresenter::actionRead|actionCreate|actionUpdate|actionDelete
HTTP 头部 Accept: application/json
方法: GET, POST, PUT, DELETE
请求体: 空白
参数

format = json
id = 1
associations = array(
	users => 1
	blogs => 2
)
data = ""
query = array(0)

文件上传

RestRoute 读取标准的 PHP 输入并将数据放入动作中的 $data 参数。这对于单个文件上传或分块上传很合适,因为它是一种原始数据。

对于多文件上传,RestRoute 仅需在创建 \Nette\Application\Request 时设置文件。在 Presenter 中注入 \Nette\Application\Request 服务并使用这些文件。

class FooPresenter {
  /** @var \Nette\Application\Request @inject */
  public $request;

  public function actionCreate () {
    $files = $this->request->getFiles();
  }
}

##覆盖方法 PUT、PATCH、DELETE

可以通过以下方式覆盖 PUTPATCHDELETE 方法

HTTP 头 X-HTTP-Method-Override

示例

X-HTTP-Method-Override: <PUT|PATCH|DELETE>

查询参数 __method

示例

?__method=<PUT|PATCH|DELETE>

##开发

RestRoute是在Docker容器中通过docker-compose命令开发的。

示例

$ docker-compose run --rm default install  # install deps via composer
$ docker-compose run --rm default  # runs tests in container

连接到容器

$ docker-compose run --rm default bash # runs bash in container and attach tty