# acme-sdk: migracja 1.x -> 2.x > Przykładowa notatka migracyjna. W realnym wdrożeniu ten katalog zasila pakiet APM > utrzymywany przez zespół właściciela SDK (np. `pubi/apm-packages/acme-sdk-migrations`), > a `apm install` dostarcza go do joba CI z pinem po tagu. ## Zmiany łamiące kompatybilność | 1.x | 2.x | Uwagi | |---|---|---| | `from acme import Client` | `from acme import AcmeClient` | zmiana wyłącznie nazwy | | `Client(api_key=..., endpoint=...)` | `AcmeClient(api_key=..., base_url=...)` | `endpoint` -> `base_url` | | `client.send(to=..., body=...)` | `client.messages.create(recipient=..., content=...)` | wysyłka przez sub-resource | | `client.close()` | `with AcmeClient(...) as client:` | klient jest context managerem | | zwracany `dict` z kluczem `id` | obiekt `Message` z atrybutem `.id` | dostęp `msg["id"]` -> `msg.id` | ## Bez zmian - `AcmeError` pozostaje w `acme.errors`. - Format kluczy API i semantyka retry są niezmienione. ## Kolejność migracji 1. Import i konstrukcja klienta. 2. Wywołania wysyłki. 3. Zarządzanie cyklem życia (`close()` -> `with`). 4. Odczyt pól odpowiedzi.