> For the complete documentation index, see [llms.txt](https://docs.ecommerce.seb.ee/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ecommerce.seb.ee/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/arhitektura-un-paplasinamiba.md).

# Arhitektūra un paplašināmība

Izprotiet SDK portu un adapteru arhitektūru un integrējiet pielāgotus infrastruktūras adapterus.

API Client SDK ir veidots kā **heksagonāla (portu un adapteru) arhitektūra**. Katra infrastruktūras sastāvdaļa, no kuras SDK ir atkarīgs — HTTP klients, webhook klausītājs, JWE šifrētājs, JSON serializētājs, žurnālierakstu veidotājs — atrodas aiz nelielas saskarnes ( *ports*) ko pārvalda SDK lietojumprogrammas kodols. Komplektā iekļautās ieviešanas (*adapteri*) ir noklusējuma risinājumi, nevis prasības: jebkuru no tiem varat aizstāt ar savu.

Šī lapa skaidro, kā SDK ir strukturēts, kāpēc tas ir strukturēts tieši tā un ko šāda struktūra ļauj darīt. Par sintaksi, kā katrā valodā faktiski aizstāt adapteri, skatiet [SDK adapteru pārrakstīšana](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/sdk-adapteru-aizstasana.md).

## SDK struktūra

<figure><img src="https://1157570179-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FuBDtfypkI85zidcVwaDj%2Fuploads%2Fo0GePge2xT9Uws9IktvT%2Fegw-sdk-architecture-diagram.svg?alt=media&#x26;token=eb2cfd82-863c-4f86-922a-a0cb1e8aa5d7" alt="EGW SDK - ports &#x26; adapters architecture"><figcaption><p>EGW SDK — portu un adapteru arhitektūra</p></figcaption></figure>

Trīs slāņi, viena atkarību virziena:

* **Lietojumprogrammas kodols** — `EgwClient` fasāde, viena API klase katram domēnam, kā arī pieprasījumu un atbilžu DTO. Tā ir atkarīga tikai no portiem.
* **Porti** — piecas nelielas saskarnes, caur kurām kodols izsauc ārējos pakalpojumus. Tās ir SDK vienīgais līgums ar infrastruktūru.
* **Adapteri** — portu konkrētās ieviešanas, kas izmanto plaši lietotas bibliotēkas.  **bootstrap** slānis (klienta fabrika un pakalpojumu sniedzēja mehānisms) konstrukcijas laikā nosaka, kurš adapters aizpilda katru portu.

## Pieci porti

| Ports                    | Mērķis                                                                     |
| ------------------------ | -------------------------------------------------------------------------- |
| API klients              | Izejošie HTTP pieprasījumi, OAuth žetonu apstrāde                          |
| API serveris             | Ienākošo webhook klausītājs                                                |
| Datu šifrētājs           | Kartes datu JWE šifrēšana                                                  |
| Serializētājs            | DTO JSON (de)serializācija                                                 |
| Žurnālierakstu veidotājs | Diagnostikas žurnālieraksti (pēc izvēles; noklusējuma režīmā bez darbības) |

Porti ir apzināti šauri — API klienta portam ir divas metodes (`perform`, `performWithoutAuth`), šifrētājam ir viena (`encrypt`). Viena ieviešana ir vienas pēcpusdienas darbs, nevis projekts.

Katram portam ir noklusējuma adapters, kas veidots uz šīs platformas plaši lietotas bibliotēkas pamata. Atveriet savas valodas sadaļu, lai redzētu saskarņu nosaukumus un adapteri, kas aizpilda katru portu:

<details>

<summary>Java</summary>

| Ports                    | Saskarne        | Noklusējuma adapters                    |
| ------------------------ | --------------- | --------------------------------------- |
| API klients              | `ApiClient`     | `JavaNetHttpClient` (`java.net.http`)   |
| API serveris             | `ApiServer`     | `ComSunNetHttpServer`                   |
| Datu šifrētājs           | `DataEncrypter` | `NimbusDataEncrypter` (Nimbus JOSE+JWT) |
| Serializētājs            | `Serializētājs` | `JacksonSerializer` (Jackson)           |
| Žurnālierakstu veidotājs | `EgwLogger`     | `NoOpEgwLogger`                         |

</details>

<details>

<summary>PHP</summary>

| Ports                    | Saskarne                 | Noklusējuma adapters                              |
| ------------------------ | ------------------------ | ------------------------------------------------- |
| API klients              | `ApiClientInterface`     | `GuzzleHttpClient` (Guzzle 7)                     |
| API serveris             | `ApiServerInterface`     | `ReactPhpHttpServer` (ReactPHP)                   |
| Datu šifrētājs           | `DataEncrypterInterface` | `WebTokenDataEncrypter` (`web-token/jwt-library`) |
| Serializētājs            | `SerializerInterface`    | `NativeJsonSerializer` (natīvais `json_*`)        |
| Žurnālierakstu veidotājs | `EgwLoggerInterface`     | `NoOpEgwLogger`                                   |

</details>

<details>

<summary>C#</summary>

| Ports                    | Saskarne         | Noklusējuma adapters                  |
| ------------------------ | ---------------- | ------------------------------------- |
| API klients              | `IApiClient`     | `HttpApiClient` (`HttpClient`)        |
| API serveris             | `IApiServer`     | `HttpListenerApiServer`               |
| Datu šifrētājs           | `IDataEncrypter` | `JoseDataEncrypter` (`jose-jwt`)      |
| Serializētājs            | `ISerializer`    | `JsonSerializer` (`System.Text.Json`) |
| Žurnālierakstu veidotājs | `IEgwLogger`     | `NoOpEgwLogger`                       |

</details>

<details>

<summary>Node.js / TypeScript</summary>

| Ports                    | Saskarne        | Noklusējuma adapters                      |
| ------------------------ | --------------- | ----------------------------------------- |
| API klients              | `ApiClient`     | `AxiosApiClient` (axios)                  |
| API serveris             | `ApiServer`     | `HttpServerApiServer` (`node:http`)       |
| Datu šifrētājs           | `DataEncrypter` | `JoseDataEncrypter` (`jose`)              |
| Serializētājs            | `Serializētājs` | `JsonSerializer` (`JSON` + DTO kartēšana) |
| Žurnālierakstu veidotājs | `EgwLogger`     | `NoopEgwLogger`                           |

</details>

## Kāpēc šāds dizains

Maksājumu SDK dzīvo jūsu *jūsu* steksā, nevis otrādi. Jūsu backendam jau ir HTTP klients ar pielāgotiem taimautiem, starpniekserveriem un interceptoriem; žurnalēšanas ietvars ar korelācijas ID; testēšanas ietvars, kas nedrīkst atvērt reālas ligzdas. Monolīts SDK, kas stingri iebūvē savas izvēles, liek jums uzturēt divus no visa.

Heksagonālais dizains to apvērš. Lietojumprogrammas kodols — `EgwClient` fasāde, domēna API klases (`payments()`, `refunds()`, `tokens()`, sesijas API, `notifications()`), un ģenerētie DTO — satur maksājumu loģiku un neko nezina par Guzzle, Jackson vai axios. Visas trešo pušu atkarības ir ierobežotas ar adapteru slāni. Ko tas sniedz praksē:

* **Integrācija ar jūsu steku.** Novirziet SDK HTTP trafiku caur savu klientu, lai jūsu esošā taimautu, starpniekserveru, TLS un instrumentācijas politika attiektos arī uz maksājumu pieprasījumiem.
* **Novērojamība pēc jūsu noteikumiem.** Pievienojiet savu žurnalēšanas ietvaru (SLF4J, PSR-3, Serilog, pino) SDK loggera portam. Noklusējums ir bezdarbības žurnētājs — SDK klusē, līdz piešķirat tam adresātu.
* **Testējamība.** Katru portu var aizstāt ar stubu. Jūs varat testēt visu fasādi un ģenerētos DTO vienību testā ar viltotu API klientu un caurlaides šifrētāju, bez tīkla vai mock servera.
* **Nav piesaistes bibliotēkai.** Ja komplektā iekļautā atkarība konfliktē ar jūsu platformu (Jackson versiju konflikts, Guzzle galvenās versijas jauninājums), jūs ieviešat portu ar sev vēlamo bibliotēku un atsakāties no komplektā iekļautā adaptera — kodols netiek ietekmēts.

## Saskaņotība starp valodām

Visi četri SDK aptver tās pašas API darbības un ievēro to pašu arhitektūru, ar vienu un to pašu portu kopu, tiem pašiem fabriku konceptiem un spoguļotām testu pakotnēm. Katrai valodai mainās tikai nosaukumu konvencija un SPI pieeja. Ja integrējat SDK divos stekos — vai migrējat no viena uz otru — mentālais modelis pāriet pilnībā; atšķiras tikai pārrakstīšanas sintakse.

## Adaptera aizstāšana

Katra valoda ļauj jums nodrošināt savu jebkura porta ieviešanu, izmantojot trīs veidus: nodot fabrikai gatavu instanci, reģistrēt nodrošinātāju ar SDK pakalpojumu sniedzēja saskarnes (SPI) mehānismu vai paplašināt klienta fabriku. Par prioritātes noteikumiem un piemēriem katrai valodai skatiet [SDK adapteru pārrakstīšana](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/sdk-adapteru-aizstasana.md).

## Saistītās lapas

* [SDK adapteru pārrakstīšana](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/sdk-adapteru-aizstasana.md) — kā aizstāt iebūvēto adapteri katrā valodā
* [Pārskats](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/parskats.md) — valodu matrica, pakotnes, alfa statuss
* [Kļūdu apstrāde](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/kludu-apstrade.md) — `ECommException` hierarhija, kurā piedalās jūsu adapteri
* [Drošības mehānismi](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/drosibas-mehanismi.md) — ko adapterim jānodrošina (žetonu apstrāde, JWE, žurnālu rediģēšana)
* Ātrie sākumi katrai valodai: [Java](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/atrie-sakumi/java.md) · [PHP](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/atrie-sakumi/php.md) · [C#](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/atrie-sakumi/c-.net.md) · [Node.js](/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/atrie-sakumi/node.js-typescript.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.ecommerce.seb.ee/seb-docs-draft/seb-docs-public-lv/integracija/api-klienta-sdk/celvezi/arhitektura-un-paplasinamiba.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
