drparham/restfulapi

此包利用oauth2-server-laravel和laravel-cors包,并添加版本控制和路由,以实现所有包具有完全功能的API

0.0.1-alpha 2014-08-05 23:08 UTC

This package is auto-updated.

Last update: 2024-08-29 04:05:34 UTC


README

Total Downloads Latest Stable Version Latest Unstable Version

restfulapi

这是一个Laravel 4包,添加OAuth2/CORS/版本控制,以及端点管理,以向任何Laravel 4项目添加REST API。

注意:

此包目前是Alpha版本。此包还需要创建和运行测试用例以验证正确功能。此代码基于一个非包格式的Laravel 4实现,目前处于预生产使用中。

此包需要并安装以下包以支持OAuth2和CORS

https://github.com/lucadegasperi/oauth2-server-laravel

https://github.com/barryvdh/laravel-cors

安装

将以下行添加到composer.json文件中的require部分

"drparham/restfulapi": "0.0.2-alpha"

将此行代码添加到config/app.php中的providers数组

'Drparham\Restfulapi\RestfulapiServiceProvider',

将以下行添加到config/app.php中的alias数组

'AuthorizationServer' => 'LucaDegasperi\OAuth2Server\Facades\AuthorizationServerFacade',
'ResourceServer' => 'LucaDegasperi\OAuth2Server\Facades\ResourceServerFacade',

接下来运行以下命令以更新Composer的autoload类列表

composer dump-autoload

运行以下命令以发布配置文件,以便您可以根据项目自定义配置

php artisan config:publish lucadegasperi/oauth2-server-laravel
php artisan config:publish barryvdh/laravel-cors
php artisan config:publish drparham/restfulapi

运行以下迁移以创建OAUTH2系统所需的必要DB结构

php artisan migrate --package="lucadegasperi/oauth2-server-laravel"

在您的app文件夹中创建一个与以下匹配的新文件夹结构

app/
    lib/
        API/
            Snacks/
                  v1/
            Entity/
                  v1/
                    
                      
                      

在app/lib/API/Snacks/v1/下,您将创建一个名为SnacksAPI.php的文件。这将是对您的Snacks API端点的版本1。

实体由eloquent模型组成。我之所以使用Entity文件夹而不是将它们放置在默认模型目录中,是因为我们可能需要为每个API版本创建多个版本的模型。例如,如果我们需要为版本2的Snacks创建一个新的表,但我们不希望修改当前正在v1中使用的数据表,因为它已经在生产中。我们可以为Snack模型创建另一个表,并为Snack模型创建第二个版本,以将其加载到SnackAPI端点的v2版本。

一旦创建了上述结构,请打开您的项目的composer.json文件,并在classmap部分添加

"app\lib"

然后运行

composer dump-autoload

如果您有多个端点,您将创建具有与Snacks相同的命名约定多个目录。您的SnacksAPI.php类结构应实现ResourceAPIInterface.php文件,并类似于以下内容

<?php

  namespace API\Snack\v1;

  use API\Resource\v1\ResourceAPIInterface;

  use API\Entity\v1\Snack;

  class SnackAPI implements ResourceAPIInterface {

    const VERSION = '1';
    const NAME='Snack';

    public static function version() {
        return self::VERSION;
    }

    public static function name(){
        return self::NAME;
    }

	public static function fetchOne($id, $data){
    	
    }

    public static function fetchAll($data){

    }

    public static function patch($id, $data){
    	
    }

    public static function update($id, $data){
    	
    }

    public static function create($data){
    	
    }

    public static function deleteOne($id){
    	
    }

    public static function toggle($id, $fieldName='active') {
        
    }
  }

一旦创建了新文件夹和文件,您需要从项目根目录运行以下命令

php artisan dump-autoload

每次添加新端点时,请确保将此端点和当前版本添加到我们之前发布的/app/config/packages/drparham/restfulapi/api.php的restfulapi配置文件中。同时,请确保每次添加新类时都运行上述命令。

说明

此包创建一个组路由,它会捕获任何格式为api/v#/endpoint的内容,并动态确定是否存在该版本的端点,如果是,则将该依赖项注入到ResourceController中,然后路由流量到/app/lib/API/EndPoint/v1/文件夹结构中的特定EndPointAPI.php文件。

要添加新端点,您只需在上述文件夹结构中创建EndPointAPI.php类,并将其添加到api.php配置文件中,并指定当前版本。如果您只有v1,并且您请求v2,它将回退到API的v1版本。这将允许实现优雅降级。然而,如果您的当前版本是v2,则将加载位于v2文件夹中的类,而不是v1文件夹。

注意:

目前,我还没有找到一种干净的方法来确定驼峰式命名的结束点,所以目前只能自动加载单词结尾的端点。例如:Snacks、Fruit、Veggies、User、Resource。如果你有一个类似端点的话

https://yourdomain.com/api/v1/smallfruit/

系统将会寻找文件 Smallfruit/v1/SmallfruitAPI.php,而不是 SmallFruit/v1/SmallFruitAPI.php。

后者的格式当然是理想的,但不确定最好的动态转换方法。如果你想要添加手动翻译,你可以在这里找到绑定

/vendor/drparham/restfulapi/src/Drparham/Restfulapi/RestfulapiServiceProvider.php starting on line 38.

你可以取消第38行的注释,并取消下面几行的注释,然后添加你想要的任何端点翻译。这里的缺点是,如果这个包有更新,使用 composer update 更新将会覆盖你的修改。

许可证

这个包是开源软件,许可协议为 MIT 许可证