eilander / api
Laravel 5 api 包
Requires
- php: >=5.5.9
- laravel/framework: 5.1.*|5.2.*
Requires (Dev)
- markeilander/generators: ^2.0
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
这就完成了,不需要进一步的配置。