内容简介:API 的核心功能就是获取请求并返回响应给客户端,响应的数据格式是多样的,比如 JSON、XML、HTML,目前比较通用的是返回 JSON 格式数据,返回响应的方式也是多样的,这取决于当前构建的 API 的复杂度以及对未来的考量。要返回 JSON 格式响应,最简单的方式是直接从控制器返回数组或对象,但不是每个响应对象都能保证格式正确,所以你要确保它们实现了在本例中,
API 的核心功能就是获取请求并返回响应给客户端,响应的数据格式是多样的,比如 JSON、XML、HTML,目前比较通用的是返回 JSON 格式数据,返回响应的方式也是多样的,这取决于当前构建的 API 的复杂度以及对未来的考量。
快速入门
要返回 JSON 格式响应,最简单的方式是直接从控制器返回数组或对象,但不是每个响应对象都能保证格式正确,所以你要确保它们实现了 ArrayObject 或者 Illuminate\Contracts\Support\Arrayable 接口:
class TaskController extends Controller
{
public function index()
{
return Task::all();
}
}
在本例中, Task 类继承自 Illuminate\Database\Eloquent\Model ,这意味着返回的是可以被格式化为数组的数据,当然也可以返回单个用户:
class TaskController extends Controller
{
public function show($id)
{
return Task::findOrFail($id);
}
}
对于以上返回的数组或对象,Dingo API 会自动将响应数据格式化为 JSON 格式并设置 Content-Type 响应头为 application/json 。
响应构建器
当然,如果仅限于此的话,在 Dingo 中返回响应与 Laravel 框架自带的功能并无二致。实际上,在 Dingo API 中,我们可以通过 Dingo 扩展包提供的响应构建器构建各种不同形式的响应,如果与转换器(Transformer)相结合的话,还可以对响应数据按照需要进行格式化,从而极大提高 API 响应构建的灵活性和可扩展性,关于转换器我们将在下一篇教程去讨论,这篇教程我们重点关注响应构建器,并且通过响应构建器来返回一个最基本的 JSON 响应。
要使用响应构建器,控制器需要引用 Dingo\Api\Routing\Helpers trait,为了让每个 Dingo API 控制器都可以使用这个 trait,我们将其放置在 API 基类控制器 ApiController 中(在 app/Http/Controllers 创建这个新的 API 基类控制器):
<?php
namespace App\Http\Controllers;
use Dingo\Api\Routing\Helpers;
class ApiController extends Controller
{
use Helpers;
}
现在可以定义一个继承自该控制器的子控制器,为了与之前项目中已存在的 TaskController 区分开,我们单独创建一个新的资源控制器,并将其存放到 app/Http/Controllers/Api 目录下:
php artisan make:controller Api/TaskController --resource
修改该控制器,使其继承自上面创建的 ApiController 基类。在子控制器中可以通过 $this->response 属性即可访问 Dingo API 响应构建器实例,下面我们将通过这个响应构建器来构建返回给客户端的 JSON 响应。
基本 JSON 响应
要在 Dingo 中返回 JSON 响应,最简单的方式就是在响应构建器上调用 array 方法,我们以 Api\TaskController 的 show 方法为例进行演示,编写 show 方法实现代码如下:
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\ApiController;
use App\Task;
use Illuminate\Http\Request;
class TaskController extends ApiController
{
...
public function show($id)
{
$task = Task::findOrFail($id);
return $this->response->array($task->toArray());
}
...
}
这种调用方式和直接返回 $task 实例一样,底层都会转化为实例化 Illuminate\Http\Response 并将响应数据格式化为 JSON 数据。
接下来,在 routes/api.php 中新增一个 Dingo API Endpoint,这次,我们定义一个 tasks 资源路由,并将其版本号设置为 v3 :
$api->version('v3', function ($api) {
$api->resource('tasks', \App\Http\Controllers\Api\TaskController::class);
});
通过 php artisan api:routes ,可以查看注册的资源路由:
这样一来,就可以通过 Postman 访问刚刚定义的 tasks.show 路由,返回响应数据如下:
至此,我们就通过 Dingo 响应构建器返回了一个最基本的 JSON 响应,当然,这只是响应构建器一个最基本的应用,等到我们下一篇介绍完 Dingo 提供的转化器后,我们将结合响应构建器和格式转换器构建一些更复杂的 API 响应。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 深入剖析Vue源码 - 响应式系统构建(上)
- 使用Elasticsearch与TheHive构建开源安全应急响应平台
- 书单丨构建响应式微服务架构——5本书了解微服务最新动向
- 基于Blink构建亲听项目以及全链路debug项目实时响应能力
- 使用 Dingo API 扩展包快速构建 Laravel RESTful API(五) —— 转化器篇(下):结合响应构建器构...
- 使用 Dingo API 扩展包快速构建 Laravel RESTful API(六) —— 转化器及响应构建器的高级使用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。