第四节:dingo/API 最新版 V2.0 之 Responses (连载)

因为某些某些原因,不能按时更新,唉。我会尽力,加快速度。(这句话不是翻译的哈)

原文地址——> https://github.com/dingo/api/wiki/Responses

A functioning API is built upon receiving requests and returning a consumable response to the client. An API will generally return responses in an easy to consume format such as JSON. There‘s a number of different ways to return responses and it will largely depend on how complex your API is or will become.

一个运行的API 主要是获取请求并返回给客户端响应信息。一个API通常会以一种易于使用的格式返回响应,例如JSON。这是一个不同的方法去返回请求。这里有许多不同的方法可以返回响应,很大程度上取决于您的API的复杂程度或者API未来的方向。

The easiest way to return a consumable response is to simply return an array or object directly from your controller. Not every object can be correctly formatted though so you should ensure that it implements either the ArrayObject or the Illuminate\Support\Contracts\ArrayableInterface interface.

返回一个可使用的响应最简单的方式是直接从控制器返回数组或对象。不是每个对象都能够被返回正确的格式,但因此,你应该确定它继承了ArrayObject或者Illuminate\Support\Contracts\ArrayableInterface接口。

class UserController
{
    public function index()
    {
        return User::all();
    }
}

在这个实例中,我们的User类继承了Illuminate\Database\Eloquent\Model,意味着它能作为一个格式化的数组返回,所以我们能通过调用User::all(),简单的返回一个users集合。

同样的,你也能使用它返回一个单一的user。例:如下

class UserController
{
    public function show($id)
    {
        return User::findOrFail($id);
    }
}

这个包,将自动格式化响应信息之后作为JSON格式返回,并且为Content-Type 头设置为application/json。

Response Builder  响应构建器

这个响应构建器,提供一个流畅的接口去简单的生成一个定制的响应信息。这个响应构建器通常与transformers结合使用。

要想在你的控制器,使用这个响应返回。你应该引入(使用) Dingo\Api\Routing\Helpers。为了让你的全部控制器都可以用使用这个特性,你应该创建一个基类控制器,让你所有的控制器都去继承(extends)它。

use Dingo\Api\Routing\Helpers;
use Illuminate\Routing\Controller;

class BaseController extends Controller
{
    use Helpers;
}

现在,你的控制器能简单的继承基本控制器。在你的控制器中可以经由$response属性来访问响应构建器。

关于这,更详细的文档,你应该看Transformers那节。(接下来,我会慢慢翻译的,等。。)

Responding With An Array 作为一个数组返回

class UserController extends BaseController
{
    public function show($id)
    {
        $user = User::findOrFail($id);

        return $this->response->array($user->toArray());
    }
}   

 Responding With A Single Item 作为一个item返回

class UserController extends BaseController
{
    public function show($id)
    {
        $user = User::findOrFail($id);

        return $this->response->item($user, new UserTransformer);
    }
}

Responding With A Collection Of Items 作为一个元素集合返回

class UserController extends BaseController
{
	public function index()
	{
		$users = User::all();

		return $this->response->collection($users, new UserTransformer);
	}
}

  

Responding With Paginated Items    返回带分页的数组

class UserController extends BaseController
{
    public function index()
    {
        $users = User::paginate(25);

        return $this->response->paginator($users, new UserTransformer);
    }
}

Responding With No Content     无内容响应

return $this->response->noContent();

Responding With Created Response    创建了资源的响应

return $this->response->created();

你也可以,为这个created 随意的提供一个值,作为第一个参数。

return $this->response->created($location);  

Responding With An Error 返回一个错误提示

这个包内有很多不同的响应错误的提示,你可以快速的形成一个错误提示。(这块文字理解,我感觉不太好,就把真实的返回值写出来了)

return $this->response->error(‘This is an error.‘, 404);
返回信息:{"message":"This is an error.","status_code":404}
return $this->response->errorNotFound();
返回信息:{"message":"Not Found","status_code":404} 
return $this->response->errorBadRequest();
返回信息:{"message":"Bad Request","status_code":400}
return $this->response->errorForbidden();

返回信息:{"message":"Forbidden","status_code":403}

return $this->response->errorInternal();

返回信息:{"message":"Internal Error","status_code":500}

return $this->response->errorUnauthorized();

返回信息:{"message":"Unauthorized","status_code":401}

Adding Additional Headers      添加附加的表头

一旦您使用了上述方法中的一个,您就可以通过添加附加的表头来进一步定制响应。

return $this->response->item($user, new UserTransformer)->withHeader(‘X-Foo‘, ‘Bar‘);

Adding Meta Data   添加元数据

某些转化层可能会使用元数据(meta data)。当你需要提供与资源相关的额外数据时,这很有用。

return $this->response->item($user, new UserTransformer)->addMeta(‘foo‘, ‘bar‘);

你也可以设置一个 meta 数据的数组,省得多次调用 addMeta 方法。

return $this->response->item($user, new UserTransformer)->setMeta($meta);

Setting Response Status Code    设置返回值状态

return $this->response->item($user, new UserTransformer)->setStatusCode(200);

    

Custom Response Formats    自定义响应格式

在这个配置章节,我们简单的讲解了返回信息格式。通过这个dingo包,我们将自动的使用json格式,并设置一个恰当的Content-Type头。除了 JSON 格式化,还有一个 JSONP 格式化。这个 formatter 将会用一个回调包裹响应。更改格式只需要简单将配置文件(Laravel)或启动文件(Lumen)中的默认JSON格式替换成JSONP即可:

‘formats‘ => [
    ‘json‘ => ‘Dingo\Api\Http\Response\Format\Jsonp‘
]

Dingo\Api\Http\Response::addFormatter(‘json‘, new Dingo\Api\Http\Response\Format\Jsonp);

你可以注册之后使用你自己需要的格式。你的格式应该继承 Dingo\Api\Http\Response\Format\Format。这有很多请求应该被定义:formatEloquentModel,formatEloquentCollection,formatArray和getContentType。

Morphing And Morphed Events

在发送一个响应之前,它会改变它,在发送。这个过程包括运行所有转换器(Transformer)以及通过配置的响应格式发送响应。如果你需要对响应的变化有更多的控制,你可以使用 ResponseWasMorphed 和 ResponseIsMorphing 这两个事件.

在你的app/Listeners文件夹,创建一个监听器。

use Dingo\Api\Event\ResponseWasMorphed;

class AddPaginationLinksToResponse
{
	public function handle(ResponseWasMorphed $event)
	{
		if (isset($event->content[‘meta‘][‘pagination‘])) {
			$links = $event->content[‘meta‘][‘pagination‘][‘links‘];

			$event->response->headers->set(
				‘link‘,
				sprintf(‘<%s>; rel="next", <%s>; rel="prev"‘, $links[‘links‘][‘next‘], $links[‘links‘][‘previous‘])
			);
		}
	}
}

 然后通过在EventServiceProvider中注册事件及其对应监听器来监听该事件:

protected $listen = [
    ‘Dingo\Api\Event\ResponseWasMorphed‘ => [
        ‘App\Listeners\AddPaginationLinksToResponse‘
    ]
];                                                                                                                                                      

Now all responses that contain pagination links will also add these links to the Link header.(这句话,留给你们翻译)

这章结束了,马上要2018年了。新的一年,go go go !!!

原文地址:https://www.cnblogs.com/jingying/p/8041790.html

时间: 2024-08-30 14:05:42

第四节:dingo/API 最新版 V2.0 之 Responses (连载)的相关文章

dingo/API 最新版 V2.0 之安装讲解

我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https://github.com/dingo/api/wiki. The Dingo API package is meant to provide you, the developer, with a set of tools to help you easily and quickly build your

自动脚本工具新版 v2.0

自动脚本工具 下载 下载工具后,解压,直接双击 "execute.bat" 文件后(前提已配置好 jdk 1.7 的环境),会生成文件夹 "output",该文件夹下会有生成的对应语言的脚本. 你也可以先尝试修改文件 “config_example.xml” 的配置项,再运行 "execute.bat",看 "output" 文件夹下的文件有什么变化,对于程序员来说应该是很简单的东西了. 新版本支持同步输出 as3(对象+宏)

laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证

第一部分: 安装passport 使? Composer 依赖包管理器安装 Passport : composer require laravel/passport 接下来,将 Passport 的服务提供者注册到配置?件  config/app.php  的providers  数组中:(5.6后不用加 ) Laravel\Passport\PassportServiceProvider::class utf8 的 varchar 类型字符串最长255,换成utf8mb4最长是191,然而框架

Centos7 install Openstack - (第四节)添加计算服务(Nova)

Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方文档配置 官方文档地址: http://docs.openstack.org/juno/install-guide/install/yum/content/# 0x01. Install and configure controller node (在控制节点安装配置一下内容) 一) 配置基本环境

第三百二十四节,web爬虫,scrapy模块介绍与使用

第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy 使用了 Twisted异步网络库来处理网络通讯.

delphi 线程教学第四节:多线程类的改进

第四节:多线程类的改进 1.需要改进的地方 a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数,让它适合访问 COM 组件.如:在线程时空中能够创建 TAdoConnection; c) 设计一个接口能将一个过程( procedure )塞到线程时空中去运行的功能,这样,不必每次重载 Execute 函数. d) 设计一个输出信息的接口 下一节,将讲解如何用多个线程同时执行相同的任务 改进后的多线程

第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)

第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲-数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数值. 该机制叫做数据收集器(Stats Collector),可以通过 Crawler API 的属性 stats 来使用无论数据收集(stats collection)开启或者关闭,数据收集器永远都是可用的. 因此您可以import进自己的模块并使用其API(增加值或者设置新的状态键(stat k

centos LNMP第二部分nginx、php配置 第二十四节课

centos  LNMP第二部分nginx.php配置  第二十四节课 上半节课 下半节课 f

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字段的类型以及相关属性elasticsearch会根据json源数据的基础类型猜测你想要的字段映射,将输入的数据转换成可搜索的索引项,mapping就是我们自己定义的字段数据类型,同时告诉elasticsearch如何索引数据以及是否可以被搜索 作用:会让索引建立的更加细致和完善 类型:静态映射和动态