Php 使用公共RESTful API的应用程序体系结构&x2B;本地访问API

Php 使用公共RESTful API的应用程序体系结构&x2B;本地访问API,php,rest,api,design-patterns,restful-architecture,Php,Rest,Api,Design Patterns,Restful Architecture,我正在计划一个小型的web应用程序项目,它将由一个网站(使用PHP)和未来的一个移动应用程序组成。我想实现一个RESTful API(使用PHP)来与移动应用程序通信。但是由于API和网站都将用PHP编写并托管在同一台服务器上,因此从网站向公共API进行HTTP调用似乎有点奇怪(或者不是吗) 无论如何,我正在考虑在API和业务逻辑之间放置一个层,基本上只是由一个对象组成,该对象公开了与公共RESTful API相同的API,但作为一个可以直接从网站访问的PHP对象 这是个好主意还是个坏主意?为什

我正在计划一个小型的web应用程序项目,它将由一个网站(使用PHP)和未来的一个移动应用程序组成。我想实现一个RESTful API(使用PHP)来与移动应用程序通信。但是由于API和网站都将用PHP编写并托管在同一台服务器上,因此从网站向公共API进行HTTP调用似乎有点奇怪(或者不是吗)

无论如何,我正在考虑在API和业务逻辑之间放置一个层,基本上只是由一个对象组成,该对象公开了与公共RESTful API相同的API,但作为一个可以直接从网站访问的PHP对象

  • 这是个好主意还是个坏主意?为什么?
  • 这是众所周知的模式吗?如果是,它叫什么
  • 我发现一些网站提出了类似的结构,并称之为“API网关对象”,但我不确定这是一个真正的众所周知的模式,还是他们提出的东西

    以下是我的想法:

    好问题(答案)。。。不确定它是否适合此站点。我使用的正是这种模式,在与其他架构方法/框架进行了艰苦的斗争后,我最终推出了这种模式,也就是说,我不知道它的名称

    一些优点:

    • 事实证明,它对测试也非常有用,使用您最喜欢的测试玩具,可以轻松地构建和练习爬上抽象阶梯
    • 您的移动数据体系结构可以是网关对象模型的直接同构
    • 它很好地解耦了直接的php访问,并且它仍然允许您在重要的时候保留一些东西:身份验证、日志记录、数据库访问的可跟踪性
    • 它证明了你的设计的未来性:虽然现在看起来很傻,但你可能会发现你最终需要从不同的实例中获得www和移动演示。如果您做得好,将php演示迁移到使用RESTful API将是轻而易举的事
    例如:假设我有一个
    消息
    对象,该对象将有许多“普通”类:

    • 消息:普通的老php对象,没有副作用,没有持久性
    • MessageDAO:消息的持久性管理器。基本积垢,没有业务逻辑,只是基本积垢
    • MessageWF:业务逻辑提供的工作流
    • IBMessageSpec:消息的规范
    • OBMessage:我希望发送给调用方的消息的表示形式
    我使用DI容器在上面的每一个上下文中注入特定的内容


    在我的手机中,OBMessageSpec wihch本质上是一个IBMessageSpec,IBMessage映射服务器的OBMessage。这段代码几乎可以被多种实例类型和应用程序重用。

    这是个不错的主意。您可以通过一些
    API网关对象
    为内部PHP使用提供API,并公开使用相同
    API网关对象的
    restfulapi
    。它可能被命名为
    Adapter
    ,因为它通过HTTP使您的php API适应外部服务的使用

    但是为什么你需要一些已知的模式来使用它?它完美地满足了您的需求,这种体系结构允许您保持模块的一致性并避免逻辑的重复

    您可以在PHP端使用RESTful,它会更慢,但更灵活-也许将来您需要用其他语言重写后端-您不需要更改前端


    因此,由您自己决定,什么对您更有利,而不是模式。

    您认为网关对象相对于直接从表示层和ReST层到业务层的通信有什么优势?