Magento 2: Apa itu Kontrak Layanan


20

Dalam Magento 2, apakah ada contoh konkret tentang sesuatu yang dibangun menggunakan konsep Kontrak Layanan ? Saya telah melihat istilah ini banyak dilontarkan, tetapi melihat Magento 2 seperti yang ada sekarang tidak jelas bagi saya apakah Kontrak Layanan lebih merupakan prinsip panduan, atau apakah mereka benar-benar mengikat kembali ke implementasi spesifik hal-hal di Magento 2.


Jawaban:


9

Seperti yang saya pahami, semua antarmuka yang ditentukan dalam folder Api adalah Kontrak Layanan. Jadi di mana saja antarmuka digunakan, bukan implementasi sebenarnya dari kelas itu menggunakan Kontrak Layanan.

Contohnya adalah penerapan plugin ini di sini https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78

Itu menggunakan

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

dari pada \Magento\Sales\Model\Order


Tautan tidak berfungsi.
Magento Learner

Terima kasih sudah diperbarui
Kristof di Fooman

6

Layanan (juga disebut kontrak layanan) adalah salah satu pola pengembangan inti kami di Magento 2 untuk memastikan antarmuka yang stabil untuk penyesuaian / ekstensi yang mudah. Mereka mengambil 2 formulir dalam basis kode (keduanya dijelaskan @apipada kelas atau metode kelas untuk mengidentifikasi mereka sebagai antarmuka yang stabil yang dapat Anda sesuaikan dan atau tampilkan sebagai API web): API atau SPI. API didefinisikan dalam folder API dan mengambil dua bentuk - layanan yang sepenuhnya di-refactored dan hanya modul API saja.

Layanan yang sepenuhnya di-refactored dicerminkan dalam modul Pelanggan, Inventaris, Pajak, dan Penawaran * (Pelanggan menjadi layanan untuk ditiru, Penawaran memiliki area-area yang tersisa yang perlu dire-refactored). Modul hanya API dapat dilihat di Katalog, Penjualan dan CMS. Untuk layanan yang sepenuhnya di-refactored, Anda hanya perlu melakukan plugin pada metode layanan untuk memberi dampak pada web apis dan GUI. Untuk modul khusus API Anda perlu melakukan plugin pada metode layanan untuk mempengaruhi web apis tetapi masih perlu melakukan kustomisasi gaya 1x untuk memengaruhi GUI.

SPI pada dasarnya adalah antarmuka dalam kode yang dijelaskan dengan @apiyang dimaksudkan tempat yang pihak ketiga akan menerapkan untuk menyediakan beberapa fungsionalitas bisnis. Contoh SPI ( CarrierInterface) yang ditentukan dalam modul Pengiriman yang akan Anda terapkan dalam modul pengiriman Anda (yaitu, Ups).

Kerangka kerja memberikan sejumlah keuntungan menarik. Eksposur yang mudah sebagai api web (dan posting 2.0 melalui antrian pesan) vi webapi.xmlkonfigurasi (seperti gaya SOAP dan REST). Dalam waktu dekat (posting 2.0) kita akan menambahkan panggilan API keluar (panggilan sinkronisasi, atau Webhooks jika dikonfigurasi untuk mem-boot async, pesan keluar) yang semuanya dapat dikelola / diekspos melalui konfigurasi. Pemasangan / peningkatan yang lebih aman - Anda dapat mengidentifikasi secara sistematis situasi masalah (2 ekstensi atau lebih yang mengimplementasikan antarmuka yang sama). Kustomisasi yang disederhanakan yang memengaruhi apis web dan gui karena hanya ada satu metode / layanan yang dapat disesuaikan (untuk modul yang sepenuhnya di-refactored atau modul / layanan baru yang dibuat oleh komunitas).


1
Berikut adalah beberapa video dari Imagine 2015 yang akan membantu memberikan lebih banyak konteks platform Magento 2. magento.com/videos/imagine/… , magento.com/videos/imagine/… , magento.com/videos/imagine/… , magento.com/videos/imagine/…
Chuck

1

Periksa penggunaan metode ini:

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

0

Kontrak layanan Magento

Pada dasarnya, kontrak layanan hanyalah seperangkat antarmuka dan kelas yang melindungi integritas data dan menyembunyikan logika bisnis. Alasan mengapa pelanggan ingin menggunakan ini adalah karena kontrak memungkinkan layanan untuk berkembang tanpa mempengaruhi penggunanya.

Alasan peningkatan ini penting adalah karena ini mengubah cara pengguna berinteraksi dengan modul yang berbeda. Di Magento 1, tidak ada cara yang baik untuk berinteraksi dengan modul lain. Dengan kontrak layanan di Magento 2, Anda dapat mengakses dan memanipulasi data dengan mudah, tanpa harus khawatir tentang struktur sistem.

Arsitektur kontrak layanan

Lapisan layanan memiliki dua jenis antarmuka yang berbeda: antarmuka data dan antarmuka layanan. Antarmuka data adalah objek yang menjaga integritas data dengan menggunakan pola berikut:

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.

Antarmuka layanan menyediakan serangkaian metode publik yang dapat digunakan klien. Ada tiga subtipe antarmuka layanan:

Repository Interfaces
Management Interfaces
Metadata Interfaces

Antarmuka repositori

Antarmuka repositori memastikan bahwa pengguna dapat mengakses entitas data yang persisten. Misalnya, entitas data persisten dalam Modul Pelanggan adalah Konsumen, Alamat, dan Grup. Ini memberi kita tiga antarmuka yang berbeda:

CustomerRepositoryInterface
AddressRepositoryInterface
GroupRepositoryInterface

Metode yang dimiliki oleh antarmuka ini adalah:

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.

Antarmuka manajemen

Antarmuka ini berisi fungsi manajemen yang berbeda yang tidak terkait dengan repositori. Berikut ini beberapa contohnya:

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

Jumlah pola terus bertambah, dan saat hal itu terjadi, beberapa fungsi ini kemungkinan akan ditambahkan kepada mereka.

Antarmuka metadata

Antarmuka metadata memberikan informasi tentang semua atribut yang didefinisikan untuk entitas tertentu. Ini juga termasuk atribut khusus, yang dapat Anda akses dengan fungsi getCustomAttribute ($ name). Atribut khusus ini meliputi:

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.

Referensi:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.