2015-06-04 21 views
6

Spędziłem więc ostatnie godziny, przeglądając wszystkie naprawdę fantastyczne porady dotyczące wersji Web API. Niektóre z moich ulubionych, dla tych, którzy mają tak dobrze jak ja, w przypadkowej kolejności:Strukturyzacja stosu interfejsu Web API dla wersji

Best practices for API versioning?

Versioning REST API of an ASP.NET MVC application

http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html

http://www.pluralsight.com/courses/web-api-design

http://www.pluralsight.com/courses/implementing-restful-aspdotnet-web-api

Tak cała ta rada była bardzo pomocna w projektowaniu co jest zasadniczo "interfejsem" API. Możemy wykonać wywołania API ... Teraz jestem na trudnej stronie.

Jest to aplikacja silnie sterowana danymi, dla firmy z kilkoma produktami (jest to nowa), które wykonują miesięczne wydania. Niektórzy wielcy klienci, którzy będą chcieli długoterminowej obsługi wywołań API, niektórzy mniejsi klienci będą chcieli najnowszych wersji. Możemy sobie z tym poradzić z czymś podobnym do wydań przełomowych/długoterminowych API. Wspaniały.

Ale w praktyce stanie się bardzo brudny, naprawdę szybki. Ciężko pracowaliśmy, aby oddzielić warstwy naszej własnej strony internetowej, beta wewnętrznych/zewnętrznych interfejsów API, warstw repozytorium, a nawet zestawu SDK do rozruchu. Oddzielamy każde wydanie na osobne gałęzie, ale to SAAS - przechowujemy bazę danych. Tak więc nie będziemy w stanie odtwarzać wywołań interfejsu API - ale wszystko poniżej. Logika biznesowa, repozytorium i baza danych. Nie zaczynajmy nawet od testów urządzeń/integracji.

Tak więc, próba i prawdopodobnie niepowodzenie tylko zadać jedno pytanie tutaj.

Czy istnieje przyzwoity wzorzec dla strukturyzowanej, opartej na danych aplikacji .NET do obsługi wielu wersji?

W szczególności, w jaki sposób baza danych ulegnie zmianie i jak można ułożyć ogólny stos do wersji. Kilka pomysłów mam to:

  • Aktualizacja stare gałęzie kontrolne źródło stosu i wdrażania te
  • utrzymując wszystko w tym samym projekcie, ale korzystać z folderów/przestrzeni nazw całą drogę w dół
  • podział projektów kolejnych - więc rozwiązanie API ma wiele projektów "Controller", z podobnymi koncepcjami dla warstw logiki/repo

Mamy sporej ilości programistów i bez względu na to, jak dużo dokumentacji piszę, realistycznie będzie to tylko czytaj, gdy coś nie działa . Idealnym rozwiązaniem dla deweloperów musi być możliwie jak najbardziej oczywiste.

Odpowiedz

1

Nie ma idealnego rozwiązania, które pasowałoby do każdej sytuacji, niezależnie od tego, czy jest oparte na danych, czy nie.

To naprawdę trudno odpowiedzieć. Najlepiej jest użyć wielu strategii wersjonowania.

Na przykład, jeśli zmiana w bazie danych polega po prostu na dodaniu nowej kolumny, starsze wersje interfejsów API mogą zignorować nowe kolumny.

Jeśli zmiana w bazie danych oznacza, że ​​musisz całkowicie przepisać warstwę repozytorium, możesz utworzyć nowe repozytorium i nowy kontroler zamiast tylko wersji API. Następnie na punkcie końcowym można albo wybrać trasę, albo konsumenci mogą wywołać zastępczy punkt końcowy.

Jeśli występują dramatyczne zmiany na wszystkich poziomach interfejsu API, rozwiązaniem może być wersja na serwerze IIS z oddzielnym katalogiem wirtualnym (może to oznaczać odpowiednie gałęzie lub etykiety w źródłowej kontroli z intencją obsługi tylko błędów/poprawek).

Pomysły dla folderów/nazw mogą być bardzo dezorientujące dla programistów, więc odejdę od tego. Routing (np. [Route ("/ v4/Orders")]) może być lepszym sposobem na obsłużenie go. Znowu zależy to od ilości kodu i charakteru zmian.