Magento 2: cos'è un contratto di servizio


20

In Magento 2, c'è un esempio concreto di qualcosa che viene costruito usando il concetto del contratto di servizio ? Ho visto questo termine molto diffuso, ma guardando Magento 2 così com'è ora non mi è chiaro se i Contratti di servizio siano più principi guida o se in realtà si ricollegano a specifiche implementazioni di cose in Magento 2.


Risposte:


9

A quanto ho capito, tutte le interfacce definite nella cartella Api sono i Contratti di servizio. Pertanto, ovunque venga utilizzata l'interfaccia anziché l'implementazione effettiva della classe, utilizza il contratto di servizio.

Un esempio potrebbe essere l'implementazione di questo plugin qui https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78

Utilizza

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

invece di \Magento\Sales\Model\Order


Il collegamento non funziona.
Magento Learner

Grazie è aggiornato
Kristof al Fooman il

6

I servizi (chiamati anche contratti di servizio) sono uno dei nostri modelli di sviluppo principali in Magento 2 per garantire interfacce stabili per una facile personalizzazione / estensione. Prendono 2 forme nella base di codice (entrambi sono annotati @apisulla classe o sui metodi di classe per identificarli come interfacce stabili che è possibile personalizzare e o esporre come API Web): API o SPI. Le API sono definite nella cartella API e prendono due forme: un servizio completamente refactored e solo un modulo solo API.

I servizi completamente refactored si riflettono nei moduli Cliente, Inventario, Fiscale e Preventivo * (essendo il Servizio il cliente da emulare, il Preventivo ha aree rimanenti che devono essere rifattorizzate). Un modulo solo API può essere visualizzato in Catalogo, Vendite e CMS. Per i servizi con refactoring completo, è necessario eseguire solo un plug-in sul metodo di servizio per influire sia sulle API Web sia sulla GUI. Per i moduli solo API è necessario plug-in sul metodo di servizio per influire sulle API Web ma è comunque necessario eseguire personalizzazioni in stile 1x per influire sulla GUI.

Le SPI sono sostanzialmente interfacce all'interno del codice annotate @apiche sono punti previsti che terze parti implementerebbero per fornire alcune funzionalità aziendali. Un esempio di SPI ( CarrierInterface) definito nel modulo di spedizione che implementeresti nel modulo di spedizione (ad es. Ups).

Il framework di servizi offre numerosi vantaggi interessanti. Facile esposizione come api web (e in arrivo post 2.0 tramite code di messaggi) webapi.xmlconfigurazione vi (come stile SOAP e REST). Nel breve termine (post 2.0) aggiungeremo le chiamate API (sincronizzazione chiamate o Webhook se configurate per l'attivazione asincrona, i messaggi in uscita) che possono essere tutte gestite / esposte tramite la configurazione. Installazione / aggiornamenti più sicuri: è possibile identificare a livello di codice situazioni problematiche (2 o più estensioni che implementano la stessa interfaccia). Personalizzazione semplificata che influenza sia le API web sia la GUI in quanto esiste un solo metodo / servizio da personalizzare (per modulo completamente refactored o nuovi moduli / servizi creati dalla community).


1
Ecco alcuni video di Imagine 2015 che ti aiuteranno a fornire più contesto alla piattaforma Magento 2. magento.com/videos/imagine/… , magento.com/videos/imagine/… , magento.com/videos/imagine/… , magento.com/videos/imagine/…
Chuck

1

Controlla gli usi di questi metodi:

  • \Magento\Customer\Api\AccountManagementInterface::createAccount
  • \Magento\Customer\Api\CustomerRepositoryInterface::getById

0

Contratti di servizio Magento

In sostanza, i contratti di assistenza sono solo un insieme di interfacce e classi che proteggono l'integrità dei dati e nascondono la logica aziendale. Il motivo per cui i clienti vorranno utilizzarlo è che il contratto consente al servizio di evolversi senza influire sui suoi utenti.

Il motivo per cui questo aggiornamento è importante è perché cambia il modo in cui gli utenti interagiscono con diversi moduli. In Magento 1 non c'erano buoni modi per interagire con altri moduli. Con i contratti di assistenza in Magento 2, è possibile accedere e manipolare i dati facilmente, senza doversi preoccupare della struttura del sistema.

Architettura del contratto di servizio

Il livello di servizio ha due diversi tipi di interfaccia: interfacce dati e interfacce di servizio. Le interfacce dati sono oggetti che preservano l'integrità dei dati utilizzando i seguenti modelli:

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.

Le interfacce di servizio forniscono una serie di metodi pubblici che un client può utilizzare. Esistono tre sottotipi di interfacce di servizio:

Repository Interfaces
Management Interfaces
Metadata Interfaces

Interfacce del repository

Le interfacce del repository assicurano che un utente possa accedere a entità di dati persistenti. Ad esempio, le entità di dati persistenti all'interno del Modulo cliente sono Consumatore, Indirizzo e Gruppo. Questo ci dà tre diverse interfacce:

CustomerRepositoryInterface
AddressRepositoryInterface
GroupRepositoryInterface

I metodi che hanno queste interfacce sono:

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.

Interfacce di gestione

Queste interfacce contengono diverse funzioni di gestione non correlate ai repository. Ecco alcuni esempi:

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

Il numero di modelli è in costante aumento e, nel farlo, è probabile che alcune di queste funzioni vengano aggiunte ad esse.

Interfacce di metadati

Le interfacce dei metadati forniscono informazioni su tutti gli attributi definiti per un'entità specifica. Ciò include anche attributi personalizzati, a cui è possibile accedere con la funzione getCustomAttribute ($ name). Questi attributi personalizzati includono:

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.

Riferimento:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.