Php Yii-向webapp添加RESTFull API
我有一个基于Yii框架构建的用于管理酒窖的现有应用程序。我使用标准Gii实用程序创建初始CRUD控制器/模型/视图。我对代码进行了重大修改,以满足我对导航、外观和功能的需求。我现在开始设计一个配套的移动(android)应用程序,它需要消费和创建一些数据(在我的酒窖中获取葡萄酒列表-获取,在酒窖中添加新葡萄酒-发布),这些数据可以在外出购物/品酒时使用。我不打算将所有模型/控制器选项公开为web服务,只公开一组特定的函数 我的问题实际上是一个设计问题。我应该将API方法添加到现有的CRUD控制器中,还是应该为每个模型创建一个新的“API控制器”(或者我看到的另一个选项是单个apiController)?我的想法是分离API控制器。这将允许我更容易地更新/部署特定于API的更改,并在逻辑上划分接口。这个API需要经过身份验证,我可能会在将来的版本中实现OAuthPhp Yii-向webapp添加RESTFull API,php,api,rest,yii,yii-extensions,Php,Api,Rest,Yii,Yii Extensions,我有一个基于Yii框架构建的用于管理酒窖的现有应用程序。我使用标准Gii实用程序创建初始CRUD控制器/模型/视图。我对代码进行了重大修改,以满足我对导航、外观和功能的需求。我现在开始设计一个配套的移动(android)应用程序,它需要消费和创建一些数据(在我的酒窖中获取葡萄酒列表-获取,在酒窖中添加新葡萄酒-发布),这些数据可以在外出购物/品酒时使用。我不打算将所有模型/控制器选项公开为web服务,只公开一组特定的函数 我的问题实际上是一个设计问题。我应该将API方法添加到现有的CRUD控制器
顺便说一句,我已经看过RESTFullYii扩展,但我还不能确切了解它是如何工作的。我真的很想看到一个工作示例应用程序,而不仅仅是代码片段 是,选择单独的控制器。您甚至可能希望设置一个单独的应用程序,该应用程序共享您的一些应用程序模型和配置,但也允许更独立的感觉
此外,还需要规划Api的版本,因为它可能需要更改,同时还需要支持较旧的Android应用程序。我建议您创建一个新的控制器。例如ApiController。您将所有操作,如
actionAddWine
,都放入。因此,您可以将此操作称为:
http://example.com/index.php?r=api/addWine
这样做的好处是,您拥有所有的模型,您只需要通过REST与您的模式交互。为了创建一个简单的RESTAPI,您可以查看下面的文档,该文档非常简单
如果您喜欢上面提到的文章,只需使用\u sendResponse()
方法即可将响应发送到客户端。
另一件事是使用控制器的init()
另一种方法是为应用程序创建模块。如果您想将API与其他代码完全分开,可以创建一个模块。您可以使用GII创建模块。该模块的优点是,您可以分隔各个部分。例如,您的操作将是:
http://example.com/index.php?r=api/wine/add
在上面的url中,您正在api
模块和wine
控制器中调用一个操作,其名称为add
请注意,您可以通过导入模型来使用模块中的模型。我非常喜欢使用模块的建议。URI更符合真正的REST格式和实现。我想我可以更新UrlManager来删除“index.php”并将其还原为。如果需要,这还允许我通过简单地映射到(如果不在URI中,则默认映射到最新版本)来对api进行版本设置。