SDK (Software Development Kit) to gotowy zestaw narzędzi, bibliotek, dokumentacji i przykładów kodu, który dostawca platformy lub usługi daje Ci po to, żebyś nie musiał pisać wszystkiego od zera. Zamiast samodzielnie ogarniać surowe API, autoryzację i tysiąc szczegółów po drodze, dostajesz gotowe klocki w języku, którego używasz, i budujesz aplikację szybciej. W skład SDK wchodzą zwykle biblioteki do wpięcia w projekt, narzędzia (kompilatory, emulatory, debuggery), dokumentacja oraz przykładowe projekty pokazujące, jak to spiąć.
Do czego to służy
SDK jest zawsze powiązane z konkretną platformą lub usługą. Android SDK pozwala pisać aplikacje na telefony z Androidem, AWS SDK gada z chmurą Amazona, a Stripe SDK obsługuje płatności. Idea jest ta sama: ktoś już rozwiązał trudne i powtarzalne rzeczy (komunikacja sieciowa, obsługa błędów, format danych), a Ty wywołujesz to jedną metodą.
Warto rozróżnić SDK od API. API to interfejs, czyli kontrakt mówiący „co” możesz wywołać. SDK to natomiast zestaw narzędzi, który najczęściej opakowuje to API w wygodne funkcje i dorzuca całą resztę potrzebną do pracy. W skrócie: API to lista dostępnych komend, a SDK to walizka z narzędziami, w której często siedzi też klient do tego API.
Przykład z praktyki
Załóżmy, że dorzucasz do aplikacji w Pythonie wysyłanie plików na Amazon S3. Zamiast ręcznie budować podpisane żądania HTTP, instalujesz oficjalne SDK (boto3):
pip install boto3
I dalej w kodzie wystarczy mniej więcej tyle:
s3 = boto3.client("s3")
s3.upload_file("raport.pdf", "moj-bucket", "raport.pdf")
Dwie linijki zamiast godziny walki z autoryzacją. To właśnie sens SDK.
Na co uważać
- Wersje się zmieniają. SDK żyje, a aktualizacja major (np. z v2 na v3) potrafi wywrócić Twój kod. Czytaj changelog i przypinaj wersje w zależnościach.
- SDK to nie magia. Pod spodem i tak siedzi API z limitami zapytań i błędami sieci. Obsłuż wyjątki, nie zakładaj, że zawsze działa.
- Vendor lock-in. Im głębiej wsiąkniesz w jedno SDK, tym trudniej później przesiąść się na innego dostawcę.
- Bierz oficjalne SDK, a nie pierwszą lepszą bibliotekę „od społeczności”, chyba że ma świeże commity i sensowną liczbę użytkowników.
Pojęcia powiązane
API, biblioteka, framework, IDE, REST, dependency (zależności), package manager (npm, pip), wrapper.