3.2 KiB
3.2 KiB
SAP Business One Service Layer Connector
Connector komunikuje výhradně přes SAP Business One Service Layer /b1s/v1.
Hlavní vlastnosti:
- login/logout přes Service Layer
- správa
B1SESSIONaROUTEID - automatický re-login po expiraci session
- HTTP API s credentials předávanými v
X-SAP-B1-*hlavičkách podle AppFactory pravidel - OData parametry
$select,$filter,$top,$skip,$orderby - stránkování přes
odata.nextLinka@odata.nextLink - retry pro dočasné chyby
- zod validace konfigurace a hlavních response tvarů
Bezpečnostní pravidla:
- při knihovním použití se konfigurace může číst z environment variables
- při HTTP API použití se SAP credentials posílají v request headers
- hesla, cookies a session tokeny se nelogují
- hesla a session tokeny se nevrací v běžných response
- 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
HTTP API hlavičky:
X-SAP-B1-BaseUrlX-SAP-B1-CompanyDBX-SAP-B1-UsernameX-SAP-B1-PasswordX-SAP-B1-LanguagevolitelněX-SAP-B1-Reject-UnauthorizedvolitelněX-SAP-B1-Timeout-Msvolitelně
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. - 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 idoklad:
- OpenAPI dokument se servíruje pod stejným
/docsprefixem jako UI naGET /docs/openapi.json(plus aliasGET /openapi.jsonpro přímý přístup). - Swagger UI načítá dokument přes relativní endpoint
openapi.json, takže se v prohlížeči vyhodnotí jako{prefix}/docs/openapi.jsonlokálně i za proxy, bez hardcodování/apps/<app-id>. servers[0].urlse nastaví zROOT_PATH(fallback hlavičkaX-Forwarded-Prefix, nakonec/), 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 | 200 |
GET /docs/openapi.json |
200 | 200 |
servers[0].url v OpenAPI |
/ |
/apps/sap-bo |