Php 访问外部API的最佳设计模式

Php 访问外部API的最佳设计模式,php,design-patterns,Php,Design Patterns,我们公司有一个庞大的代码库,其中包含针对不同实体的类,如Porduce、Customer、Order、OrderItem等。我们需要访问AliExpress API才能上传我们的产品、编辑信息及其状态、跟踪订单等 问题是我们的实体和AliExpress实体并不总是相同的。例如,他们的产品都由多个SKU中的一个组成,而我们的产品没有SKU,但它们可以是其他SKU的“父”产品。 我们实现了一个“访问”层来访问API,并实现了一个“API函数”层来进行一些预验证和形成请求。这种方法对吗? 不清楚的是我

我们公司有一个庞大的代码库,其中包含针对不同实体的类,如Porduce、Customer、Order、OrderItem等。我们需要访问AliExpress API才能上传我们的产品、编辑信息及其状态、跟踪订单等

问题是我们的实体和AliExpress实体并不总是相同的。例如,他们的产品都由多个SKU中的一个组成,而我们的产品没有SKU,但它们可以是其他SKU的“父”产品。 我们实现了一个“访问”层来访问API,并实现了一个“API函数”层来进行一些预验证和形成请求。这种方法对吗? 不清楚的是我们还需要多少层

我们的产品类有update()、create()、createEmpty()方法来处理产品和不同产品属性类型的getter(不是单独的),所有这些方法都通过服务类处理PostgreSQL

虽然使用不同的属性或多或少是标准化的,比如说,我们需要更新一个产品,但我们做了如下事情

Product->update(array('field'=>'value'))
然而,AliExpress有几种方法来更新产品的不同属性。更新价格与更新股票不同,更新股票与其他字段的组更新不同


您建议采用什么体系结构来处理此问题?在处理对API的请求的层和我们的“项”类(如产品)之间,我们需要多少层?

您可以使用
网关模式。例如:

您可以使用
网关模式。例如:

在访问外部API时,我倾向于使用DAO或存储库模式。它提供了一个很好的抽象,并允许更灵活的测试


通过将域对象传递到DAO中,可以封装调用的复杂性。这还意味着,如果服务消失,您需要用其他东西(如数据库)替换它,您可能不必更改更高级别的代码。

在访问外部API时,我倾向于使用DAO或存储库模式。它提供了一个很好的抽象,并允许更灵活的测试

通过将域对象传递到DAO中,可以封装调用的复杂性。这还意味着,如果服务消失,您需要用其他东西(如数据库)替换它,您可能不需要更改更高级别的代码