claude overtook and fixes
This commit is contained in:
@@ -31,3 +31,27 @@ HTTP API hlavičky:
|
||||
- `X-SAP-B1-Language` volitelně
|
||||
- `X-SAP-B1-Reject-Unauthorized` volitelně
|
||||
- `X-SAP-B1-Timeout-Ms` volitelně
|
||||
|
||||
## Detaily komunikace se Service Layer
|
||||
|
||||
- **Login** – `POST /b1s/v1/Login` s `{ CompanyDB, UserName, Password, Language? }`.
|
||||
`Language` se posílá jako celé číslo (Service Layer očekává `Edm.Int32`); nenumerická
|
||||
hodnota se vynechá. Z odpovědi se čtou cookies `B1SESSION` a `ROUTEID` (s fallbackem na
|
||||
`SessionId` v body) a `SessionTimeout` (minuty) pro výpočet expirace.
|
||||
- **Autentizované requesty** – posílají `Cookie: B1SESSION=…; ROUTEID=…`. Při `401`
|
||||
connector jednou provede re-login a request zopakuje; re-login nesnižuje retry budget,
|
||||
takže funguje i při `SAP_B1_RETRY_COUNT=0`.
|
||||
- **Logout** – `POST /b1s/v1/Logout` se 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.nextLink` i `@odata.nextLink`. U absolutních
|
||||
nextLinků se zachová i query string (`$skip` apod.), takže `listAll` nezacyklí.
|
||||
|
||||
## 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í). Proto:
|
||||
|
||||
- OpenAPI `servers` obsahuje `ROOT_PATH` (`/apps/<app-id>`), takže Swagger `Try it out`
|
||||
volá `…/apps/<app-id>/api/<resource>`.
|
||||
- Swagger UI načítá OpenAPI dokument z `ROOT_PATH + /openapi.json`, ne z kořene domény.
|
||||
- Lokálně bez `ROOT_PATH` se vše chová relativně ke kořeni (`/openapi.json`, server `/`).
|
||||
|
||||
Reference in New Issue
Block a user