4.1 KiB
4.1 KiB
SAP Business One Service Layer Connector (POLSTRIN)
Connector komunikuje výhradně přes SAP Business One Service Layer /b1s/v1 instalace POLSTRIN
(https://ws.polstrin.cz:50000). Specifika instalace jsou v polstrin-specifika.md.
Hlavní vlastnosti:
- login/logout přes Service Layer
- správa
B1SESSIONaROUTEID, jedna sdílená session mezi requesty - automatický re-login po expiraci session
- SAP credentials výhradně z environment variables (AppFactory secrets), ne z requestů
- volitelná ochrana
/apirout hlavičkouX-Api-Key(secretAPI_KEY) - OData parametry
$select,$filter,$top,$skip,$orderby - stránkování přes
odata.nextLinka@odata.nextLink - generický přístup k libovolnému entity setu přes
/api/entities/...(POLSTRIN UDO tabulkyU_*) - retry pro dočasné chyby
- zod validace konfigurace a hlavních response tvarů
Bezpečnostní pravidla:
- konfigurace se čte výhradně z environment variables (
SAP_B1_*,API_KEY) - SAP credentials se nikdy nepřijímají v requestech, nelogují a nevrací v response
- hesla, cookies a session tokeny se nelogují
- testy nepoužívají reálný SAP přístup
- pro self-signed certifikáty je dostupné
rejectUnauthorized, ale produkčně se doporučuje důvěryhodný certifikát
Detaily komunikace se Service Layer
- Login –
POST /b1s/v1/Logins{ CompanyDB, UserName, Password, Language? }.Languagese posílá jako celé číslo (Service Layer očekáváEdm.Int32); nenumerická hodnota se vynechá. Z odpovědi se čtou cookiesB1SESSIONaROUTEID(s fallbackem naSessionIdv body) aSessionTimeout(minuty) pro výpočet expirace. - Autentizované requesty – posílají
Cookie: B1SESSION=…; ROUTEID=…. Při401connector jednou provede re-login a request zopakuje; re-login nesnižuje retry budget, takže funguje i přiSAP_B1_RETRY_COUNT=0. - Logout –
POST /b1s/v1/Logoutse posílá s aktivní session cookie, jinak by Service Layer nevěděl, kterou session ukončit, a nechal by ji běžet až do timeoutu. - Verze a system info – login response obsahuje
Version(např.1000230= SAP B1 10.0 PL 23) aSessionTimeout; connector si je ukládá (client.loginInfo, přežije logout) a HTTP endpointPOST /api/session/loginje vrací v odpovědi.GET /api/system/infonavíc vrátí přehled instalace: service document (GET /b1s/v1/→ dostupné entity sety),UserFieldsMD(UDF),UserTablesMD(UDT),UserObjectsMD(UDO) aCompanyService_GetAdminInfo. Sekce, na kterou SAP uživatel nemá práva, se vrátí jako{ "error": "…" }, aby jedno chybějící oprávnění neshodilo celý přehled (chyba je v odpovědi vidět, nejde o tiché selhání). - Stránkování – následuje
odata.nextLinki@odata.nextLink. U absolutních nextLinků se zachová i query string ($skipapod.), takželistAllnezacyklí.
Reverse proxy a Swagger
Aplikace běží za AppFactory proxy na /apps/<app-id> (Caddy handle_path prefix před
předáním do containeru odstraní, takže container vidí routy bez prefixu a z requestu
veřejnou cestu nelze odvodit). Stejný přístup jako sousední služba google-service:
/docsse servíruje přímo jako HTML (GET /docs), bezswagger-ui-expressa bez statického middleware – proto nevzniká žádný redirect/docs→/docs/, který by za proxy zahodil prefix/apps/<app-id>(to byla příčina bílé stránky).- Swagger UI assety se načítají z CDN (
unpkg.com/swagger-ui-dist@5). - Spec URL je
ROOT_PATH + /openapi.json, takže odkazuje na veřejné/apps/<app-id>/openapi.json. servers[0].urlse nastaví zROOT_PATH(jinak/), takže SwaggerTry it outvolá…/apps/<app-id>/api/<resource>.
| Kontrola | Lokálně (bez ROOT_PATH) | S ROOT_PATH=/apps/sap-bo |
|---|---|---|
GET /health |
200 | 200 |
GET /docs (Swagger UI) |
200, žádný redirect | 200, žádný redirect |
GET /openapi.json |
200 | 200 |
spec URL v /docs |
/openapi.json |
/apps/sap-bo/openapi.json |
servers[0].url v OpenAPI |
/ |
/apps/sap-bo |