Magento 2:什么是服务合同


Answers:


9

据我了解,Api文件夹中定义的所有接口都是服务合同。因此,在任何地方使用该接口而不是该类的实际实现都使用服务协定。

一个例子就是这里的插件实现https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78

它用

protected function getOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)

代替 \Magento\Sales\Model\Order


链接无效。
Magento Learner

谢谢更新
Kristof在

6

服务(也称为服务合同)是我们在Magento 2中的核心开发模式之一,可确保稳定的界面以方便自定义/扩展。它们在代码库中采用2种形式(@api在类或类方法上均带有注释,以将它们标识为可以自定义或作为Web API公开的稳定接口):API或SPI。API在API文件夹中定义,采用两种形式-完全重构的服务和仅API的模块。

完全重构的服务反映在“客户”,“库存”,“税”和“报价” *模块中(客户是要模拟的服务,“报价”还有一些地方需要重构)。在目录,销售和CMS中可以看到仅API模块。对于完全重构的服务,您只需要在service方法上做一个插件即可影响Web api和GUI。对于仅API的模块,您需要插入服务方法才能影响Web api,但仍然需要进行1x样式自定义才能影响GUI。

SPI基本上是代码中带有注释的接口,这些接口@api是第3方为提供某些业务功能而实施的预定位置。CarrierInterface在运输模块(即Ups)中实现的运输模块中定义的SPI()示例。

服务框架提供了许多有趣的优点。易于作为Web API(以及通过消息队列发布的2.0)进行vi webapi.xml配置(如SOAP和REST样式)。在不久的将来(2.0版之后),我们将添加API调出(同步调用,或Webhooks(如果配置为触发异步,则发出消息)),这些都可以通过配置进行管理/公开。更安全的安装/升级-您可以以编程方式识别问题情况(使用同一接口的2个或更多扩展)。简化的自定义同时影响Web api和gui,因为只有一种方法/服务可以自定义(对于完全重构的模块或社区创建的新模块/服务)。


1
以下是Imagine 2015的一些视频,这些视频将有助于提供Magento 2平台的更多背景信息。 magento.com/videos/imagine/...magento.com/videos/imagine/...magento.com/videos/imagine/...magento.com/videos/imagine/...
查克


0

Magento服务合同

本质上,服务合同只是保护数据完整性并隐藏业务逻辑的一组接口和类。客户之所以要使用此服务,是因为合同允许服务发展而不会影响其用户。

此升级很重要的原因是因为它更改了用户与不同模块交互的方式。在Magento 1中,没有与其他模块进行交互的好方法。使用Magento 2中的服务合同,您可以轻松访问和操作数据,而不必担心系统的结构。

服务合同架构

服务层具有两种不同的接口类型:数据接口和服务接口。数据接口是通过使用以下模式来维护数据完整性的对象:

Theyre read-only, since they only define constants and getters.
Getter functions can contain no parameters.
A getter function can only return a simple object type (string, integer, Boolean), a simple type array, and another data interface.
Mixed types cant be returned by getter functions.
Data entity builders are the only way to populate and modify data interfaces.

服务接口提供了一组客户端可以使用的公共方法。有三种服务接口子类型:

Repository Interfaces
Management Interfaces
Metadata Interfaces

仓库接口

存储库接口可确保用户可以访问持久数据实体。例如,客户模块内的持久数据实体是消费者,地址和组。这给了我们三个不同的接口:

CustomerRepositoryInterface
AddressRepositoryInterface
GroupRepositoryInterface

这些接口具有的方法是:

Save  If theres no ID, creates a new record, and updates whats existing if there is one.
Get  Looks for the IDs in the database and returns a certain data entity interface.
GetList  Finds all data entities that correspond with the search criteria, then gives access to the matches by returning the search result interface.
Delete  Deletes the selected entity
DeleteById  Deletes the entity when you only have its key.

管理界面

这些接口包含与存储库无关的不同管理功能。这里有些例子:

AccountManagementInterface contains functions such as createAccount(), isEmailAvailable(), changePassword(), and activate().
AddressManagementInterface checks whether an address is valid by using the validate() function.

模式的数量一直在增长,并且这样做的话,其中的某些功能可能会添加到其中。

元数据接口

元数据接口提供有关为特定实体定义的所有属性的信息。这还包括自定义属性,您可以使用getCustomAttribute($ name)函数进行访问。这些自定义属性包括:

EAV attributes  Defined via the administration interface for a local site. They can differ according to the site, which means that they cant be represented in the data entity interface written in PHP.
Extension attributes, for which the extension modules are used.

参考:

https://www.interactivated.me/uk/blog/service-contracts-magento-2/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.