Załóżmy, że chcesz podzielić swoje aplikacje na usługi. Czy istnieją uzasadnione powody, aby zastosować podejście SOA, a nie po prostu utworzyć interfejs API biblioteki, który może zostać załadowany przez aplikacje, które tego potrzebują.
Załóżmy, że chcesz podzielić swoje aplikacje na usługi. Czy istnieją uzasadnione powody, aby zastosować podejście SOA, a nie po prostu utworzyć interfejs API biblioteki, który może zostać załadowany przez aplikacje, które tego potrzebują.
Odpowiedzi:
Różnica może być subtelna między nimi. Na przykład w świecie .NET możesz mieć aplikację, która wydaje się monolityczna dla użytkownika końcowego i która będzie działać na tej samej maszynie, ale wewnątrz będzie podzielona na kilka usług WCF. Możesz także mieć architektury, w których biblioteki nie są silnie połączone (dodatki / wtyczki) i po prostu postępują zgodnie z protokołem, rozmawiając ze sobą.
Jeśli unikniemy mówienia o przypadkach pośrednich i zajmiemy się tylko silnie połączoną biblioteką API w porównaniu z oddzielną usługą REST, możesz rozważyć następujące kwestie:
Biblioteka API jest wywoływana na tym samym komputerze. Usługi mogą być hostowane w dowolnym miejscu i wywoływane z dowolnego miejsca. Jeśli liczysz na hostowanie aplikacji na wielu komputerach ze względu na wydajność / skalowalność / bezpieczeństwo, prawdopodobnie będziesz musiał skorzystać z usług.
Podobnie jest w przypadku korzystania z jednej usługi przez aplikację wdrożoną na kilku komputerach. Na przykład, jeśli robisz aplikację dla banku wykonującego obliczenia finansowe, jednym ze sposobów jest wdrożenie całej dużej aplikacji na każdym pulpicie i zmuszanie do robienia dużych aktualizacji każdemu klientowi za każdym razem; innym podejściem byłoby hostowanie części obliczeniowej na serwerach i wdrażanie na komputerach jedynie lekkiej aplikacji z tylko interfejsem użytkownika i wieloma wywołaniami do tych serwerów.
Jeśli prowadzisz usługę REST, każdy może z niej korzystać: użytkownik komputera Mac, osoba korzystająca z systemu Linux itp. Jeśli utworzyłeś bibliotekę C # za pomocą programu Visual Studio i rozpowszechniasz ją jako bibliotekę DLL, zapomnij o użytkownikach (klientach) ?), którzy nie mają systemu Windows.
Kolejną zaletą usług jest to, że po aktualizacji usługa jest natychmiast wdrażana u wszystkich odbiorców usługi. Jeśli więc naprawiłeś błąd lub problem z wydajnością, każdy otrzymuje korzyść, gdy tylko zaktualizowana usługa zostanie uruchomiona, zamiast dystrybuować aktualizację, którą ludzie mogą zignorować.
Zalety biblioteki:
Zalety usługi:
Podejście SOA umożliwia oddzielne hostowanie i obsługę różnych usług. Oprócz kodu wdrożenie określonej usługi może wymagać wielu specjalnych konfiguracji (haseł, portów, certyfikatów itp.). Korzystanie z usługi REST ma skończoną złożoność, którą można jasno udokumentować i łatwo zrozumieć. Jest również bezpieczniejszy, ponieważ oznacza, że nie musisz udzielać dostępu do baz danych ani innych zasobów klientom.
Jeśli nastąpi zmiana w usłudze SOA, usługa SOA będzie musiała zostać przebudowana, ponownie przetestowana i wdrożona ponownie. Wszystkie aplikacje korzystające z tej usługi mogą nadal to robić. Zmiana biblioteki w bibliotece DLL oznacza, że wszyscy konsumenci tej biblioteki będą musieli zostać przebudowani w celu odniesienia do tej biblioteki DLL, wszyscy będą musieli zostać ponownie przetestowani i wszyscy będą musieli zostać ponownie wdrożeni. Istnieje również niebezpieczeństwo, że może się to nie powieść, a różne aplikacje będą miały różne wersje biblioteki DLL. Czasami może to nie stanowić problemu - być może każdy system powinien mieć wersję biblioteki, która była obecna w czasie wdrażania (być może zaktualizowałeś system rejestrowania, aby miał przydatne nowe funkcje - czy naprawdępotrzebujesz zaktualizować każdy system z nim?) w tym przypadku biblioteka jest w porządku. Ale powiedz, że masz usługę obliczania stawki podatkowej, a przepisy podatkowe się zmieniają. Nie chcesz aktualizować każdego systemu, aby uwzględnić tę zmianę, lepiej byłoby zrobić to w jednym miejscu. W takim przypadku usługa jest lepszą opcją.
Istnieje kilka dobrych odpowiedzi, ale chciałbym dodać więcej rzeczy do podanych odpowiedzi:
Metoda biblioteki API jest bardzo przydatna, gdy chcesz wchodzić w interakcje z jak najmniejszymi kosztami. Konsekwencją jest wyższe sprzężenie API z aplikacjami, które go wykorzystują. Czasami jest to w porządku dla aplikacji, a nawet konieczne, jednak jeśli masz bardzo rozproszony system lub uważasz, że interoperacyjność jest ogromnym problemem, być może będziesz musiał pójść o jeden krok wyżej od abstrakcji i użyć innych sposobów komunikacji. Zwłaszcza jeśli chcesz mieć system rozproszony, SOAP jest swego rodzaju kolejnym krokiem w SOA, ale nadal pozostaniesz zależny między jednostkami, ponieważ muszą one znać się nawzajem. REST przenosi go na nowy poziom, umożliwiając maszynie nauczenie się czegoś o zawartości innych usług w ujednolicony sposób.
W twoim przypadku, jeśli twoja aplikacja nie jest rozpowszechniana, nie widzę żadnego powodu, aby przekształcić ją w SOA.