使用 Dingo API 扩展包快速构建 Laravel RESTful API(三) —— 返回基本 JSON 响应

栏目: PHP · 发布时间: 5年前

内容简介: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\TaskControllershow 方法为例进行演示,编写 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 ,可以查看注册的资源路由:

使用 Dingo API 扩展包快速构建 Laravel RESTful API(三) —— 返回基本 JSON 响应

这样一来,就可以通过 Postman 访问刚刚定义的 tasks.show 路由,返回响应数据如下:

使用 Dingo API 扩展包快速构建 Laravel RESTful API(三) —— 返回基本 JSON 响应

至此,我们就通过 Dingo 响应构建器返回了一个最基本的 JSON 响应,当然,这只是响应构建器一个最基本的应用,等到我们下一篇介绍完 Dingo 提供的转化器后,我们将结合响应构建器和格式转换器构建一些更复杂的 API 响应。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web开发权威指南

Web开发权威指南

[美] Chris Aquino,、[美] Todd Gandee / 奇舞团 / 人民邮电出版社 / 2017-9 / 99.00元

本书在知名培训机构Big Nerd Ranch 培训教材的基础上编写而成,囊括了JavaScript、HTML5、CSS3等现代前端开发人员急需的技术关键点,包括响应式UI、访问远程Web 服务、用Ember.js 构建应用,等等。此外,还会介绍如何使用前沿开发工具来调试和测试代码,并且充分利用Node.js 和各种开源的npm 模块的强大功能来进行开发。 全书分四部分,每部分独立完成一个项......一起来看看 《Web开发权威指南》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具