💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
>[info] 响应 一个可用的 API 简单来说就是通过接受请求并将易处理的响应返回给客户端,一般来说, API 有多种易处理的方式返回响应,例如 JSON ,而具体应该使用哪种方式返回响应取决于你的 API 的复杂程度。 ***** 通常来说,直接在控制器中返回一个数组或对象就是最简单的返回响应的方式,但是不是所有的对象都能被正确的格式化,所以需要确认该对象实现了 `ArrayObject` 或 `Illuminate\Support\Contracts\ArrayableInterface` 接口。 ~~~ class UserController extends Controller { public function show() { return User::all(); } } ~~~ 这个包将会自动的格式化响应为 JSON,并设置 `Content-Type` 头为 `application/json`。 ***** >[info] 响应生成器 响应生成器提供了一个流畅的接口去方便的建立一个更定制化的响应。响应的生成器通常是与 **transformer** 相结合。 ***** 要利用响应生成器,你的控制器需要使用 `Dingo\Api\Routing\Helpers` trait。为了在你的控制器里保持引入和使用这个 trait,你可以创建一个基础控制器,然后你的所有的 API 控制器都继承它。 ``` use Dingo\Api\Routing\Helpers; use Illuminate\Routing\Controller; class BaseController extends Controller { use Helpers; } ``` ***** >[info] 响应一个数组 ~~~ <?php namespace App\Http\Controllers; use Dingo\Api\Routing\Helpers; use App\User; class UserController extends Controller { use Helpers; public function show($id) { $user = User::findOrFail($id); return $this->response->array($user->toArray()); } } ~~~ ![](https://img.kancloud.cn/2f/7b/2f7b633191a93cf0ec88950e75293e06_895x118.png) ***** >[info] 响应一个元素 **控制器:** ~~~ <?php namespace App\Http\Controllers; use Dingo\Api\Routing\Helpers; use App\User; use App\Http\Controllers\Api\TestapiTransformer; class UserController extends Controller { use Helpers; public function show($id) { $user = User::findOrFail($id); return $this->response->item($user , new TestapiTransformer()); } } ~~~ ~~~ <?php namespace App\Http\Controllers\Api; use App\User; use League\Fractal\TransformerAbstract; class TestapiTransformer extends TransformerAbstract { public function transform(User $user) { return [ 'id' => $user['id'], 'name' => $user['name'], 'email' => $user['email'], ]; } } ~~~ **结果:** ![](https://img.kancloud.cn/82/ff/82ffee61fc45998a671ac72d9a795cdb_408x146.png) ***** >[info] 响应一个元素集合 ~~~ <?php namespace App\Http\Controllers; use Dingo\Api\Routing\Helpers; use App\User; use App\Http\Controllers\Api\TestapiTransformer; class UserController extends Controller { use Helpers; public function show($id) { $user = User::all(); return $this->response->collection($user , new TestapiTransformer()); } } ~~~ **结果:** ![](https://img.kancloud.cn/11/9e/119e6572afa10dc546ef298ea2395e2c_673x485.png) ***** >[info] 分页响应 **控制器:** ~~~ <?php namespace App\Http\Controllers; use Dingo\Api\Routing\Helpers; use App\User; use App\Http\Controllers\Api\TestapiTransformer; class UserController extends Controller { use Helpers; public function show($id) { $user = User::paginate(2); return $this->response->paginator($user , new TestapiTransformer()); } } ~~~ **结果:** ![](https://img.kancloud.cn/39/15/3915b45b0153c654efa21a8cbe8d12b8_535x417.png) >[info] 无内容响应 浏览器刷新无任何响应 ``` return $this->response->noContent(); ``` >[info] 错误响应 ~~~ // 一个自定义消息和状态码的普通错误。 return $this->response->error('This is an error.', 404); ~~~ ![](https://img.kancloud.cn/c2/ab/c2ab01dcb0b0d842037a9643ba2ebfec_517x232.png) ***** ~~~ // 一个没有找到资源的错误,第一个参数可以传递自定义消息。 return $this->response->errorNotFound(); ~~~ ![](https://img.kancloud.cn/57/43/57432ba2f8c3619fcd8e3e8c2b940739_483x225.png) ***** ~~~ // 一个 bad request 错误,第一个参数可以传递自定义消息。 return $this->response->errorBadRequest(); ~~~ ![](https://img.kancloud.cn/95/97/95974ade259f74258b71effee995cd95_400x182.png) ***** ~~~ // 一个服务器拒绝错误,第一个参数可以传递自定义消息。 return $this->response->errorForbidden(); ~~~ ![](https://img.kancloud.cn/ba/9c/ba9cd016adfe4ddba60b4db8cf59444b_428x204.png) ***** ~~~ // 一个内部错误,第一个参数可以传递自定义消息。 return $this->response->errorInternal(); ~~~ ![](https://img.kancloud.cn/64/9f/649f76a29d8ed34404aba50db8bae32e_374x160.png) ***** ~~~ // 一个未认证错误,第一个参数可以传递自定义消息。 return $this->response->errorUnauthorized(); ~~~ ![](https://img.kancloud.cn/53/e7/53e74da87d080f6e9e6c9f67190e3aef_412x141.png) ***** >[info] 添加额外的头信息 ~~~ $user = User::findOrFail($id); return $this->response->item($user, new TestapiTransformer())->withHeader('X-Foo', 'Bar'); ~~~ >[info] 添加 Meta 信息 添加 meta 数据: ~~~ return $this->response->item($user, new TestapiTransformer())->addMeta('foo', 'bar'); ~~~ ![](https://img.kancloud.cn/fb/83/fb8349cfc17866c5357c01ac59b6ed36_503x188.png) 自定义设置多个数据: ~~~ return $this->response->item($user, new TestapiTransformer())->setMeta(["id" => 1,'name' => 'wqs']); ~~~ ![](https://img.kancloud.cn/85/f0/85f0f8e5913af007463849f579f5c226_432x200.png) ***** >[info] 设置响应状态码 ~~~ return $this->response->item($user, new TestapiTransformer())->setStatusCode(200); ~~~ ![](https://img.kancloud.cn/19/d6/19d6d586a05d54af943a9413b085809a_393x123.png)