tequilarapido / api-response
在 Laravel 应用中以简单的方式返回格式良好的 JSON 响应。
Requires
- php: ^7.1.3
- laravel/framework: ~5.8.0|^6.0|^7.0
- league/fractal: ^0.14.0
Requires (Dev)
- orchestra/testbench: ^3.8
- dev-master
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- 1.1.0
- 1.0.x-dev
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.2
- 0.0.1
- dev-dependabot/npm_and_yarn/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/hosted-git-info-2.8.9
- dev-dependabot/npm_and_yarn/lodash-4.17.21
- dev-dependabot/npm_and_yarn/handlebars-4.7.7
- dev-dependabot/npm_and_yarn/y18n-3.2.2
- dev-dependabot/npm_and_yarn/ini-1.3.7
- dev-dependabot/npm_and_yarn/standard-version-8.0.1
- dev-dependabot/npm_and_yarn/lodash.template-4.5.0
- dev-develop
This package is auto-updated.
Last update: 2024-09-11 04:46:04 UTC
README
在 Laravel 应用中以简单的方式返回格式良好的 JSON 响应。
安装
您可以使用 composer 安装此包
$ composer require tequilarapido/api-response
添加服务提供者
Tequilarapido\ApiResponse\ApiResponseServiceProvider::class
使用方法
此包包含一个辅助函数 api_response()
,作为使用 app(Tequilarapido\ApiResponse\ApiResponse::class)
的糖语法。
从项目(数组/关联数组/对象)返回响应
return api_response()->item(['result`' => 'success'])
结果
{
"data":
{
"result":
"success"
}
}
从集合返回响应
return api_response()->item(collect(['Apple', 'Orange', 'Kiwi']))
结果
{
"data":
{
"Apple",
"Orange",
"Kiwi",
}
}
从分页集合返回响应
return api_response()->item(collect(['Apple', 'Orange', 'Kiwi']))
结果
{
"data": [1, 2, 3],
"meta": {
"pagination": {
"count": 3,
"current_page": 1,
"links": {
"next": "/?page=2"
},
"per_page": 3,
"total": 15,
"total_pages": 5
}
}
}
转换器
您可以使用转换器与 item()
、collection()
和 paginatedCollection
方法一起使用,在返回响应之前转换结果。
有关转换器背后的概念的更多信息,请阅读 League\Fractal 文档。
简单来说,转换器类必须扩展 League\Fractal\TransformerAbstract
并包含一个 transform()
方法,该方法接受原始值/对象作为参数,并按我们的意愿转换它。
假设我们需要返回一个包含从数据库中检索到的书籍集合的 API 响应,并且我们想要格式化/增强/限制结果。
class BookTransformer extends TransformerAbstract { public function transform($book) { return [ 'id' => (int)$book->id, 'title' => strtoupper($book->title), 'price' => '$' . $book->price, 'published_at' => $book->published_at->format('d/m/Y'), 'url' => 'https://store.books.com/books/' . $book->id ]; } }
Route::get('/books', function () { // ie. Book::all() $books = collect([ (object)['title' => 'An awesome book', 'id' => '1', 'price' => 10, 'published_at' => Carbon::createFromFormat('Y-m-d', '2016-10-01')], (object)['title' => 'A second awesome book', 'id' => '2', 'price' => 100, 'published_at' => Carbon::createFromFormat('Y-m-d', '2016-10-02')], ]); return api_response()->collection($books, new BookTransformer); });
结果
{
"data": [
{
"id": 1,
"price": "$10",
"published_at": "01/10/2016",
"title": "AN AWESOME BOOK",
"url": "https://store.books.com/books/1"
},
{
"id": 2,
"price": "$100",
"published_at": "02/10/2016",
"title": "A SECOND AWESOME BOOK",
"url": "https://store.books.com/books/2"
}
]
}
附加 cookies
对于 item()
、collection()
和 paginatedCollection
方法,返回的结果是一个构建的 Illuminate\Http\Response
对象。
要附加 cookies,您需要指示 api_response()
方法不构建响应,将 $built 参数设置为 false,附加 cookie,然后构建响应。
return api_response() ->item(['result`' => 'success'], null, null, false) ->withCookie(new \Symfony\Component\HttpFoundation\Cookie('name', 'value')) ->build();
附加标题
对于 item()
、collection()
和 paginatedCollection
方法,返回的结果是一个构建的 Illuminate\Http\Response
对象。
要附加标题,您需要指示 api_response()
方法不构建响应,将 $built 参数设置为 false,附加标题,然后构建响应。
return api_response() ->item(['result`' => 'success'], null, null, false) ->withHeader('X-CUSTOM', 'customvalue') ->build();
其他有用方法
更新日志
有关最近更改的更多信息,请参阅 更新日志。
测试
$ composer test
安全
如果您发现任何与安全相关的问题,请通过 :author_email 发送电子邮件,而不是使用问题跟踪器。
贡献
有关详细信息,请参阅 贡献。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。