Laravel 5 api 包

v1.0.0 2016-02-16 10:07 UTC

This package is auto-updated.

Last update: 2024-09-21 20:18:03 UTC


README

嗨,这是一个为 Laravel 5 定制的 api 包。

目录

[目录]

步骤 1:添加服务提供者

在你的 config/app.php 中,将 Eilander\Api\Providers\ApiServiceProvider:class 添加到 providers 数组的末尾

<?php
'providers' => [
    ...
    Eilander\Api\Providers\ApiServiceProvider::class,
],

步骤 2:将包添加到 composer.json 以进行自动加载

将包添加到主 composer.json 中以进行自动加载,并运行 composer dump-autoload,如下所示

<?php
   "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Eilander\\Api\\": "vendor/eilander/api/src/"
        }
    },
composer dump-autoload

配置

有一些 API 配置选项你可能想要覆盖。首先,发布默认配置。

php artisan vendor:publish

这将向以下位置添加一个新的配置文件:config/api.php

<?php
return array(

	'version' => 'v1',

	'route' => [
		'v1' => [ 'prefix' => 'api/v1', 'namespace' => 'Api\V1' ]
	],

	'keys' => [
		env('API_KEY', 'secret')
	],

);

版本

这是你 api 的当前版本

路由

这个数组数组有助于在 Laravel 的 routes.php 文件中设置路由。我们默认采用前缀 api/v1。

密钥

这是有效的 API 密钥列表,用于验证请求。默认情况下,我们支持环境变量 API_KEY,你可以在 .env 文件中设置它。

中间件

此包包括一个 Middleware 类

Eilander\Api\Http\Middleware\AuthenticateApiKey

AuthenticateApiKey 中间件旨在保护 Api 路由不受未经授权的访问。除非你有公共 API,否则我们建议你在所有路由上包含它。

发送一个头 x-api-key = secrtekey 与 api 请求一起验证路由。

$apiRoute = config('api.route.'.config('api.version')); //change this if other versions are available
Route::group($apiRoute, function() {
	Route::group([‘middleware’ => ‘Eilander\Api\Http\Middleware\AuthenticateApiKey’], function() {
		Route::resource('gebruiker', 'GebruikerController');
		//{{builder_api_routes}}
	});
});

控制器

我们提供了一个有用的 BaseController 基础控制器类,它包含一个 response 方法,允许你返回 json 响应或获取对 Eilander\Api\Response 类的访问,该类提供各种辅助方法。

此基础控制器继承自 App\Http\Controllers\Controller 中的基础 Laravel 控制器。不要删除此类。

还有一些其他控制器实现可用,它们扩展了 *BaseController。在撰写本文时,这些是

GatewayController Api 控制器,它实现了一些默认功能,并实现了网关模式。查看 Eilander\Api\Http\Controllers\GatewayController 了解所有可用方法。

响应

Eilander/Api/Response 类提供各种辅助方法,并最终使用 Illuminate\Contracts\Routing\ResponseFactory Laravel 类返回带有适当头部的 json 响应。

你可以在控制器中使用 API 响应类,通过使用 response 辅助方法

	public function index()
	{
		$items = new Collection([‘one’,’two’,’three’]);

		// Calling with a single argument returns a json response
		return $this->response($items);
	}

或者

	public function index()
	{
		$items = new Collection([‘one’,’two’,’three’]);

		// Calling with no argument returns the response object
		return $this->response()->data($items);
	}

	public function find($id)
	{
		$item = Item::find($id);

		if ( ! $item ) {
			// Using the response object you can call helper methods.
			return $this->response()->errorNotFound();
		}

		return $this->response()->data($item);
	}

内部请求

Eilander/Api/InternalRequests 类处理对 api 的内部请求。比如说,你有一个 api 模块和一个 admin 模型,那么 admin 模型可以消化 api 模块中的每个 api 端点。

所有请求都应该有一个与端点匹配的 uri,并且可以发送与请求一起发送的参数。

    InternalRequests::get('api/v1/posts'); // get al posts
    InternalRequests::get('api/v1/posts/123'); // get post with id 123
    InternalRequests::post('api/v1/posts', ['name' => 'Mark', 'age' => 31]); // add post
    InternalRequests::put('api/v1/posts/123', ['age' => 32]); // change post with id 123
    InternalRequests::delete('api/v1/posts/123'); // delete post with id 123

这就完成了,不需要进一步的配置。