yii框架如何访问api

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii框架如何访问api相关的知识,希望对你有一定的参考价值。

1. Yii

Yii是一个基于组件的高性能的php的框架,用于开发大规模Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主体化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。而且这个框架的价格也并不太高。事实上,Yii是最有效率的PHP框架之一。

2. CodeIgniter

CodeIgniter是一个应用开发框架——一个为建立PHP网站的人们所设计的工具包。其目标在于快速的开发项目:它提供了丰富的库组以完成常见的任务,以及简单的界面,富有条理性的架构来访问这些库。使用CodeIgniter开发可以往项目中注入更多的创造力,因为它节省了大量编码的时间。

3. CakePHP

CakePHP是一个快速开发PHP的框架,其中使用了一些常见的设计模式如ActiveRecord,Association Data Mapping,Front Controller以及MVC。其主要目标在于提供一个令任意水平的PHP开发人员都能够快速开发web应用的框架,而且这个快速的实现并没有牺牲项目的弹性。

4. PHPDevShell

PHPDevShell是一个开源(GNU/LGPL)的快速应用开发框架,用于开发不含javascript的纯PHP。它有一个完整的GUI管理员后台界面。其主要目标在于开发插件一类的基于管理的应用,其中速度、安全、稳定性及弹性是最优先考虑的重点。其设计形成了一个简单的学习曲线,PHP开发者无需学习复杂的新术语。PHPDevShell的到来满足了开发者们对于一个轻量级但是功能完善,可以无限制的进行配置的GUI的需求。

5. Akelos

Akelos PHP框架是一个基于MVC设计模式的web应用开发平台。基于良好的使用习惯,使用它可以完成如下任务:

◆方便的使用Ajax编写views

◆通过控制器管理请求(request)及响应(response)

◆管理国际化的应用

◆使用简单的协议与模型及数据库通信

你的Akelos应用可以在大多数共享主机服务供应方上运行,因为Akelos对服务器唯一的要求就是支持PHP。因此,Akelos PHP框架是理想的用于发布单独web应用的框架,因为它不需要非标准PHP配置便能运行。

6. Symfony

Symfony是一个用于开发PHP5项目的web应用框架。

这个框架的目的在于加速web应用的开发以及维护,减少重复的编码工作。

Symfony的系统需求不高,可以被轻易的安装在任意设置上:你只需一个Unix或Windows,搭配一个安装了PHP5的网络服务器即可。它与差不多所有的数据库兼容。Symfony的价位不高,相比主机上的花销要低得多。

对于PHP开发者而言,使用Symfony是一件很自然的事,其学习曲线只有短短一天。干净的设计以及代码可读性将缩短开发时间。开发者可以将敏捷开发的原理(如DRY,KISS或XP等)应用在其中,将重点放在应用逻辑层面上,而不用花费大量时间在编写没完没了的XML配置文件上。

Symfony旨在建立企业级的完善应用程序。也就是说,你拥有整个设置的控制权:从路径结构到外部库,几乎一切都可以自定义。为了符合企业的开发条例,Symfony还绑定了一些额外的工具,以便于项目的测试,调试以及归档。

7. Prado

PRADO团队由一些PRADO狂热者组成,这些成员开发并推动PRADO框架以及相关项目的进行。

PRADO的灵感起源于Apache Tapestry。从04年开始,PRADO成为SourceForge上的开源项目之一。这个项目目前进展到了3.x版本。

8. Zend

作为PHP艺术及精神的延伸,Zend框架的基础在于简单,面向对象的最佳方法,方便企业的许可协议,以及经过反复测试的快速代码库。Zend框架旨在建造更安全,更可靠的Web 2.0应用及web服务,并不断从前沿厂商(如Google,Amazon,Yahoo,Flickr,StrikeIron和ProgrammableWeb等)的API那里吸收精华。

9. ZooP

Zoop PHP框架,意为Zoop面向对象的PHP框架。

这是个稳定,可伸缩并可移植的框架。从诞生到现在的5年间,已经在不少产品开发中被使用。Zoop是一个快速,有效并干净的框架。它的伸缩性很好,你可以只安装你需要的功能。

对代码并不很熟悉的开发者也可以通过Zoop快速的开发安全的web应用。熟练的开发者则可以更加将Zoop的弹性利用到极致。

Zoop建议将display,logic以及数据层(MVC)分开使用。

Zoop由很多组件和项目集合而成,其中包括smarty和prototype AJAX框架,PEAR模块等。高效的核心组件提供了很多你原本需要自己编码来实现的功能。Zoop内置的纠错功能可以通过配置实现生产环境下的错误日志生成,这个错误日志提供了很多信息,可读性很高,可以更轻易的寻找并排除错误。

Zoop的一个特别之处在于其GuiControls,在PHP中是一个相当革新的想法。它提供了很多form widgets与验证完整的集合到一起,并形成了一个可以轻松打造个性化GuiControls的框架。

10. QPHP

QPHP,意为快速PHP,它是一个与ASP.NET类似的MVC框架。基本上它是这样一个情况:

◆整合了Java和C#的美感

◆除去了在其他PHP框架中使用的Perl形式的意义含糊的语言

◆大量基于OOP的概念
参考技术A 1. Yii

Yii是一个基于组件的高性能的PHP的框架,用于开发大规模Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主体化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。而且这个框架的价格也并不太高。事实上,Yii是最有效率的PHP框架之一。

2. CodeIgniter

CodeIgniter是一个应用开发框架——一个为建立PHP网站的人们所设计的工具包。其目标在于快速的开发项目:它提供了丰富的库组以完成常见的任务,以及简单的界面,富有条理性的架构来访问这些库。使用CodeIgniter开发可以往项目中注入更多的创造力,因为它节省了大量编码的时间。

3. CakePHP

CakePHP是一个快速开发PHP的框架,其中使用了一些常见的设计模式如ActiveRecord,Association Data Mapping,Front Controller以及MVC。其主要目标在于提供一个令任意水平的PHP开发人员都能够快速开发web应用的框架,而且这个快速的实现并没有牺牲项目的弹性。

4. PHPDevShell

PHPDevShell是一个开源(GNU/LGPL)的快速应用开发框架,用于开发不含Javascript的纯PHP。它有一个完整的GUI管理员后台界面。其主要目标在于开发插件一类的基于管理的应用,其中速度、安全、稳定性及弹性是最优先考虑的重点。其设计形成了一个简单的学习曲线,PHP开发者无需学习复杂的新术语。PHPDevShell的到来满足了开发者们对于一个轻量级但是功能完善,可以无限制的进行配置的GUI的需求。

5. Akelos

Akelos PHP框架是一个基于MVC设计模式的web应用开发平台。基于良好的使用习惯,使用它可以完成如下任务:

◆方便的使用Ajax编写views

◆通过控制器管理请求(request)及响应(response)

◆管理国际化的应用

◆使用简单的协议与模型及数据库通信

你的Akelos应用可以在大多数共享主机服务供应方上运行,因为Akelos对服务器唯一的要求就是支持PHP。因此,Akelos PHP框架是理想的用于发布单独web应用的框架,因为它不需要非标准PHP配置便能运行。

6. Symfony

Symfony是一个用于开发PHP5项目的web应用框架。

这个框架的目的在于加速web应用的开发以及维护,减少重复的编码工作。

Symfony的系统需求不高,可以被轻易的安装在任意设置上:你只需一个Unix或Windows,搭配一个安装了PHP5的网络服务器即可。它与差不多所有的数据库兼容。Symfony的价位不高,相比主机上的花销要低得多。

对于PHP开发者而言,使用Symfony是一件很自然的事,其学习曲线只有短短一天。干净的设计以及代码可读性将缩短开发时间。开发者可以将敏捷开发的原理(如DRY,KISS或XP等)应用在其中,将重点放在应用逻辑层面上,而不用花费大量时间在编写没完没了的XML配置文件上。

Symfony旨在建立企业级的完善应用程序。也就是说,你拥有整个设置的控制权:从路径结构到外部库,几乎一切都可以自定义。为了符合企业的开发条例,Symfony还绑定了一些额外的工具,以便于项目的测试,调试以及归档。

7. Prado

PRADO团队由一些PRADO狂热者组成,这些成员开发并推动PRADO框架以及相关项目的进行。

PRADO的灵感起源于Apache Tapestry。从04年开始,PRADO成为SourceForge上的开源项目之一。这个项目目前进展到了3.x版本。

8. Zend

作为PHP艺术及精神的延伸,Zend框架的基础在于简单,面向对象的最佳方法,方便企业的许可协议,以及经过反复测试的快速代码库。Zend框架旨在建造更安全,更可靠的Web 2.0应用及web服务,并不断从前沿厂商(如Google,Amazon,Yahoo,Flickr,StrikeIron和ProgrammableWeb等)的API那里吸收精华。

9. ZooP

Zoop PHP框架,意为Zoop面向对象的PHP框架。

这是个稳定,可伸缩并可移植的框架。从诞生到现在的5年间,已经在不少产品开发中被使用。Zoop是一个快速,有效并干净的框架。它的伸缩性很好,你可以只安装你需要的功能。

对代码并不很熟悉的开发者也可以通过Zoop快速的开发安全的web应用。熟练的开发者则可以更加将Zoop的弹性利用到极致。

Zoop建议将display,logic以及数据层(MVC)分开使用。

Zoop由很多组件和项目集合而成,其中包括smarty和prototype AJAX框架,PEAR模块等。高效的核心组件提供了很多你原本需要自己编码来实现的功能。Zoop内置的纠错功能可以通过配置实现生产环境下的错误日志生成,这个错误日志提供了很多信息,可读性很高,可以更轻易的寻找并排除错误。

Zoop的一个特别之处在于其GuiControls,在PHP中是一个相当革新的想法。它提供了很多form widgets与验证完整的集合到一起,并形成了一个可以轻松打造个性化GuiControls的框架。

10. QPHP

QPHP,意为快速PHP,它是一个与ASP.NET类似的MVC框架。基本上它是这样一个情况:

◆整合了Java和C#的美感

◆除去了在其他PHP框架中使用的Perl形式的意义含糊的语言

◆大量基于OOP的概念

Yii2 使用 RESTful 写API接口 实例

Yii2 使用 RESTful?

其实 Yii2 框架本身就对 RESTful 是友好支持的,具体可以看官方文档(http://www.yiichina.com/doc/guide/2.0/rest-quick-start),或者去看源码,都是可以的

注意: 我们使用resTful的同时,需要借助于测试工具进行地址访问,例如: 谷歌的PostMAN,火狐的HttpRequester工具来访问
创建一个控制器  

我的工作目录如图所示 (首先, 参照下面的目录图片,可以看出,我创建了两个大的文件夹,v1,v2,目的是测试访问不同版本的接口)


下面以v2中的文件为例:

创建一个控制器类 api\modules\v2\UserController 如下,
[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    namespace api\modules\v2\controllers;  
      
    use yii\rest\ActiveController;  
      
    class UserController extends ActiveController  
    {  
        public $modelClass = api\modules\v2\models\user\UserBaseInfo;  
    }  

控制器类扩展自 yii\rest\ActiveController。通过指定 yii\rest\ActiveController::modelClass作为
api\modules\v2\models\user\UserBaseInfo, 控制器就能知道使用哪个模型去获取和处理数据。

配置URL规则

修改有关在应用程序配置的urlManager组件的配置:

[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    urlManager => [  
        enablePrettyUrl => true,  
        enableStrictParsing => true,  
        showScriptName => false,  
        rules => [  
            [class => yii\rest\UrlRule, controller => user],    
        ],  
    ]  


说明:  

      a): 上面的配置主要是为user控制器增加一个 URL 规则。这样,用户的数据就能通过美化的 URL 和有意义的 http 动词进行访问和操作。

      b): 上面是没有加上版本的url配置,至于关于版本我将以新的一篇来说明.


配置另外的:
[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    controllerNamespace => api\controllers,  
    components => [  
            user => [  
                identityClass => api\modules\v1\models\oauth\AccessToken,  
                enableAutoLogin => true,  
                enableSession => false,  
                loginUrl => null  
            ],  

尝试

随着以上所做的最小的努力,你已经完成了创建用于访问用户数据的 RESTful 风格的 API。你所创建的 API 包括:

相比于URL管理的Web应用程序,上述主要的新东西是通过RESTful API请求yii\rest\UrlRule。这个特殊的URL规则类将会建立一整套子URL规则来支持路由和URL创建的指定的控制器。例如, 上面的代码中是大致按照下面的规则:

[
    PUT,PATCH users/<id> => user/update,
    DELETE users/<id> => user/delete,
    GET,HEAD users/<id> => user/view,
    POST users => user/create,
    GET,HEAD users => user/index,
    users/<id> => user/options,
    users => user/options,
]


    GET /users: 逐页列出所有用户
    HEAD /users: 显示用户列表的概要信息
    POST /users: 创建一个新用户
    GET /users/123: 返回用户 123 的详细信息
    HEAD /users/123: 显示用户 123 的概述信息
    PATCH /users/123 and PUT /users/123: 更新用户123
    DELETE /users/123: 删除用户123
    OPTIONS /users: 显示关于末端 /users 支持的动词
    OPTIONS /users/123: 显示有关末端 /users/123 支持的动词

补充:Yii 将在末端使用的控制器的名称自动变为复数。(译注:个人感觉这里应该变为注意)


经过上面的配置后,你会看到你的控制类继承的是yii\rest\ActiveController,如果你进这个文件后,你会看到下面这些方法:

[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    public function actions()  
    {  
            return [  
                index => [  
                    class => yii\rest\IndexAction,  
                    modelClass => $this->modelClass,  
                    checkAccess => [$this, checkAccess],  
                ],  
                view => [  
                    class => yii\rest\ViewAction,  
                    modelClass => $this->modelClass,  
                    checkAccess => [$this, checkAccess],  
                ],  
                create => [  
                    class => yii\rest\CreateAction,  
                    modelClass => $this->modelClass,  
                    checkAccess => [$this, checkAccess],  
                    scenario => $this->createScenario,  
                ],  
                update => [  
                    class => yii\rest\UpdateAction,  
                    modelClass => $this->modelClass,  
                    checkAccess => [$this, checkAccess],  
                    scenario => $this->updateScenario,  
                ],  
                delete => [  
                    class => yii\rest\DeleteAction,  
                    modelClass => $this->modelClass,  
                    checkAccess => [$this, checkAccess],  
                ],  
                options => [  
                    class => yii\rest\OptionsAction,  
                ],  
            ];  
        }  
      
        /** 
         * @inheritdoc 
         */  
        protected function verbs()  
        {  
            return [  
                index => [GET, HEAD],       
                view => [GET, HEAD],        
                create => [POST],  
                update => [PUT, PATCH],  
                delete => [DELETE],  
            ];  
        }  


从上面的方法我们可以知道,如果在你使用yii框架自带的方法时,它默认有create, delete, update, index, view等的一下方法

所创建的 API 包括:

    GET /users: 逐页列出所有用户
    POST /users: 创建一个新用户
    GET /users/123: 返回用户 123 的详细信息
    PATCH /users/123 and PUT /users/123: 更新用户123
    DELETE /users/123: 删除用户123

但是如果你要是不想用他的某些方法,我们可以通过下面的方法来自己覆盖对应的方法

例如:
[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    public function actions()  
    {  
        $actions = parent::actions();  
      
        // 注销系统自带的实现方法  
        unset($actions[index]);  
          
        //unset($actions[‘create‘]);  
        //unset($actions[‘update‘]);  
        //unset($actions[‘delete‘]);  
      
      return $actions;  
    }  
      
    //覆盖父类的actionIndex方法,并进行重写  
    public function actionIndex()  
    {  
        //获取用户所有信息  
        ......  
    }  


对于其他的方法同上....

于是我们就可以通过方法地址获取想要的数据:GET  http://www.api.com/users

 

以上是关于yii框架如何访问api的主要内容,如果未能解决你的问题,请参考以下文章

记录学习新框架yii

yii框架数据库操作数据访问对象(DAO)简单总结

YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

Yii框架Yiiapp()的理解

yii2高级框架怎么整合前台html页面

Yii框架记录