Changelog
Zmiany w API i w tej dokumentacji, najnowsze na górze. Przy każdym wpisie widać, skąd o zmianie wiemy - bo to zmienia, jak należy ją traktować.
Przyrostowa synchronizacja przez timestamp - udokumentowana granica
Nowe recipe 07 opisuje mechanizm, który obcina ruch o rzędy wielkości: zapisujesz
api.timestampz odpowiedzi i wysyłasz go jako parametrtimestampw kolejnym żądaniu, dostając tylko to, co się zmieniło. Zmierzone na/v2/incidents: 87 rekordów bez filtra, 2 z filtrem.Co to dla Ciebie znaczy, i to jest ważne: granica jest inkluzywna (
ut >= timestamp), nie wyłączna. Żądanie ztimestamprównymutrekordu nadal go zwraca. Czyli każda synchronizacja dostarcza ponownie rekordy z poprzedniej granicy, a naiwna pętlaINSERTduplikuje wiersz przy każdym odpytaniu.Zapis musi być idempotentny - klucz na
idi upsert. To nie jest defekt, to zabezpieczenie: gwarantuje, że nie przegapisz rekordu zapisanego w tej samej sekundzie co Twój kursor.Endpoint wymiany tokenu jest wreszcie w referencji API
GET /v2/oauth, czyli wymianaclient_idisecret_keyna token, nie występuje w opublikowanym dokumencie OpenAPI - mimo że jest pierwszą rzeczą, jakiej potrzebuje każdy integrator. Dopisaliśmy go do publikowanej specyfikacji, więc widać go w referencji razem z parametrami, przykładową odpowiedzią i działającym "Try it out".Kontrakt potwierdzony na produkcji:
GETzclient_idisecret_keyw query stringu.To nie pochodzi ze specyfikacji zespołu API. Ten opis dopisaliśmy my, na podstawie zachowania produkcji. Traktuj kształt jako sprawdzony, a źródło jako nasze. Gdy zespół API opublikuje endpoint u siebie, nasza wersja zniknie.
Przy okazji:
GET /v2/sports,GET /v2/areasiGET /v2/languagesodpowiadają bez tokenu (zmierzone: HTTP 200 z pełnymi danymi dla nieprawidłowego tokenu, celowe wg zespołu). W referencji mają teraz pustesecurity, więc "Try it out" na nich działa, zanim zdobędziesz credentiale.Definicje 46 sportów dostępne jako dane referencyjne
Sekcja Data reference pokazuje teraz statusy, wyniki, detale, incydenty i typy tabel dla 46 aktywnych sportów, pobrane z
GET /v2/sports/{id}i odświeżane codziennie.Wcześniej te listy istniały tylko w wewnętrznej dokumentacji i były utrzymywane ręcznie, więc rozjeżdżały się z API. Teraz są generowane, a każda zmiana kontraktu otwiera Pull Requesta z opisem po nazwach, nie po identyfikatorach.
Co to dla Ciebie znaczy: mapowania
status_id,result idiincident_idmożesz brać ze strony sportu, zamiast kodować je z pamięci. Uwaga, że zestaw pól różni się per sport -/v2/statuseszwraca 369 pozycji dla wszystkich sportów razem i nie ma polasport_id, więc podział na sporty pochodzi z definicji sportu, nie z tego endpointu.