Czytałem już strategie wersjonowania dla interfejsów API ReST i coś, czego nie wydaje się adresować, to sposób zarządzania podstawową bazą kodów.Jak zarządzać podstawową bazą kodową dla wersji API?
Powiedzmy robimy kilka łamanie zmian API - na przykład, zmieniając nasz zasób klienta tak, że zwraca oddzielne forename
i surname
pól zamiast pojedynczego name
dziedzinie. (W tym przykładzie użyję rozwiązania do porównywania adresów URL, ponieważ łatwo jest zrozumieć związane z nim pojęcia, ale pytanie dotyczy negocjacji treści lub niestandardowych nagłówków HTTP)
Mamy teraz punkt końcowy pod numerem http://api.mycompany.com/v1/customers/{id}
, a inny niezgodny punkt końcowy pod numerem http://api.mycompany.com/v2/customers/{id}
. Wciąż publikujemy poprawki błędów i aktualizacje zabezpieczeń do interfejsu API w wersji 1, ale rozwój nowych funkcji skupia się teraz na v2. Jak zapisujemy, testujemy i wdrażamy zmiany na naszym serwerze API? Widzę co najmniej dwa rozwiązania:
Użyj kontroli źródła gałąź/etykietę na kodzie v1. v1 i v2 są opracowywane i wdrażane niezależnie, a scalenia kontroli wersji są używane w razie potrzeby, aby zastosować tę samą poprawkę do obu wersji - podobnie do zarządzania bazami kodów dla natywnych aplikacji podczas opracowywania nowej dużej wersji, przy jednoczesnym wspieraniu poprzedniej wersji.
Uczyń samą bazę kodów o wersjach API, dzięki czemu otrzymasz jedną bazę kodów, która zawiera zarówno reprezentację klienta v1, jak i reprezentację klienta v2. Traktuj wersję jako częś ć architektury rozwiĘ ... zania zamiast problemu z instalacjĘ ... - prawdopodobnie używajĘ ... c pewnej kombinacji przestrzeni nazw i routingu, aby upewnić się, że próby sĘ ... obsługiwane przez poprawnĘ ... wersję.
Oczywistą zaletą modelu oddziału jest to, że jest to trywialne, aby usunąć stare wersje API - wystarczy zatrzymać wdrożenie odpowiedniego oddziału/tag - ale jeśli używasz kilka wersji, może skończyć się z bardzo zawiłe struktura oddziałów i potok wdrażania. Model "ujednoliconej bazy kodów" pozwala uniknąć tego problemu, ale (myślę, że?) Znacznie utrudniłoby usuwanie przestarzałych zasobów i punktów końcowych z kodu, gdy nie są już potrzebne. Wiem, że jest to prawdopodobnie subiektywne, ponieważ jest mało prawdopodobne, aby było prostą poprawną odpowiedzią, ale jestem ciekawy, w jaki sposób organizacje, które utrzymują złożone API w wielu wersjach, rozwiązują ten problem.
Dzięki za pytanie! Nie mogę uwierzyć, że więcej ludzi nie odpowiada na to pytanie !! Jestem chory i zmęczony tym, że wszyscy mają opinię na temat tego, jak wersje wchodzą do systemu, ale nikt nie wydaje się stawić czoła prawdziwemu trudnemu problemowi z wysłaniem wersji do ich właściwego kodu. Do tej pozornie powszechnego problemu powinno już być co najmniej szereg akceptowanych "wzorców" lub "rozwiązań". Istnieje szalona liczba pytań na SO dotyczących "wersji API". Decydując się na akceptację wersji jest FRIKKIN SIMPLE (relatywnie)! Posługiwanie się nią w bazie kodu, gdy już się dostanie, jest trudne! – arijeet