Rozróżnienie między interfejsem API a interfejsem użytkownika

23

Próbuję napisać „standardową” biznesową stronę internetową. Pod pojęciem „standard” rozumiem, że ta strona obsługuje zwykły HTML5, CSS i JavaScript dla frontonu, back-endu (do przetwarzania rzeczy) i uruchamia MySQL dla bazy danych. Jest to podstawowa strona CRUD: front-up robi po prostu wszystko, co ma baza danych; backend zapisuje w bazie danych cokolwiek użytkownik wejdzie i wykonuje pewne przetwarzanie. Podobnie jak większość witryn tam.

Tworząc moje repozytoria Github, aby rozpocząć kodowanie, zdałem sobie sprawę, że nie rozumiem różnicy między zapleczem a interfejsem API . Innym sposobem sformułowania mojego pytania jest: gdzie API pojawia się na tym obrazie?

Wymienię więcej szczegółów, a następnie pytania, które mam - mam nadzieję, że dzięki temu lepiej rozumiecie moje pytanie, ponieważ jestem tak zdezorientowany, że nie znam konkretnego pytania.

Kilka dodatkowych szczegółów:

  • Chciałbym wypróbować wzór Model-Widok-Kontroler. Nie wiem, czy to zmieni pytanie / odpowiedź.
  • Interfejs API będzie RESTful
  • Chciałbym, aby mój back-end używał własnego API zamiast pozwalać back-endowi na oszukiwanie i wywoływanie specjalnych zapytań. Myślę, że ten styl jest bardziej spójny.

Moje pytania:

  • Czy front-end wywołuje back-end, który wywołuje API? A może front-end po prostu wywołuje API zamiast wywoływać back-end?
  • Czy zaplecze po prostu wykonuje interfejs API, a interfejs API zwraca kontrolę do zaplecza (gdzie zaplecze działa jako ostateczny kontroler, delegując zadania)?

Zachęcamy do długich i szczegółowych odpowiedzi wyjaśniających rolę interfejsu API wraz z interfejsem użytkownika. Jeśli odpowiedź zależy od modelu programowania (modele inne niż wzorzec Model-View-Controller), opisz te inne sposoby myślenia o interfejsie API. Dzięki. Jestem bardzo zmieszany.

Jason
źródło

Odpowiedzi:

25

Myślę, że jesteś zdezorientowany sposobem, w jaki termin API jest niewłaściwie wykorzystywany i nadużywany przez wielu programistów.

  • API oznacza interfejs programowania aplikacji, tj. Każdy oficjalnie określony interfejs między różnymi systemami (lub częściami tego samego systemu).
  • Jakiś czas temu dużym wyzwaniem dla uruchamiania stron internetowych było oferowanie publicznego dostępu do niektórych ich danych wewnętrznych za pośrednictwem interfejsu API usługi internetowej, zwykle przy użyciu REST i JSON, umożliwiając w ten sposób programistom zewnętrznym integrację z ich systemami. Twórcy stron internetowych zaczęli używać terminu „API” w znaczeniu konkretnie (i tylko) „publicznie dostępnej usługi sieciowej” i nadużywają jej w celu uwzględnienia jej implementacji.
  • Jeśli chodzi o frontend i backend, ten interfejs API usługi internetowej (i jego implementacja) jest backendem . Niektóre jego części mogą być publicznie dostępne, a inne tylko dla interfejsu użytkownika.
  • Inną nazwą tego jest „warstwa usługi”, tj. Kod
    • reprezentuje usługi, które wywołuje frontend
    • nie zawiera logiki wyświetlania (w końcu to zadanie interfejsu użytkownika)
    • jest bardziej abstrakcyjny i gruboziarnisty niż proste akcje CRUD (jedno zgłoszenie serwisowe często obejmuje wiele akcji CRUD i powinno zostać wykonane w ramach transakcji bazy danych).
    • zawiera logikę biznesową aplikacji
Michael Borgwardt
źródło
Mam naprawdę głupie pytanie. Czy to jest istota architektury zorientowanej na usługi?
Johnny
@ johnny: nie - SOA to koncepcja na znacznie wyższym poziomie abstrakcji, chodzi bardziej o to, jak organizujesz funkcjonalność swojej firmy, niż o warstwy techniczne.
Michael Borgwardt,
Nie nazwałbym tego jednak niewłaściwym użyciem. Może „rebranding”? Tak samo jest z „MVC”, który w kontekście rozwoju sieci jest czymś zupełnie innym niż w czasach PARC, kiedy ten termin został ukuty.
Thomas Junk
9

Naszkicujmy „typową” architekturę strony internetowej, zarówno z „front-endem”, jak i „back-endem”. A ponieważ jest to strona internetowa, będziemy również jawnie mieć „klienta”. (Ponieważ w przeglądarce JavaScript nie ma możliwości bezpośredniego wywołania MySQL na serwerze).

Dla jasności używamy następujących terminów:

  • Klient : przeglądarka zgodna z HTML5, szczególnie. DOM i JavaScript tam załadowane w celu manipulowania nim.
  • Front-End : serwer PHP, na który wskazuje DOM, zawierający zarówno żądaną pojedynczą stronę, jak i niektóre punkty dostępu XML lub JSON w stylu AJAX.
  • Back-end : Serwer bazy danych, na którym działa MySQL.

W przypadku prawidłowo zaprojektowanego programu każdy z tych komponentów ma prywatny interfejs API do komunikacji z innymi. „Front-end” kod PHP nie wydaje SELECTbezpośrednio dowolnych instrukcji SQL , ale raczej wywołuje procedury składowane, wstępnie autoryzowany SQL, a nawet odrębne wywołania PHP do zupełnie innej instancji PHP działającej na serwerze zaplecza . Te procedury składowane lub różne połączenia HTTP same w sobie są interfejsem API.

Definicja nie zmienia się, nawet jeśli pozwolimy na pewną nieczystość naszego projektu. Jeśli Twój PHPplik zapisuje i wysyła ciąg SQL bezpośrednio do MySQL, TO JEST WCIĄŻ API , aczkolwiek bardzo nietypowy, którego powtórzenie jest mało prawdopodobne.

Zauważ, że całkowicie możliwe jest, aby twój front-php był ściśle synchroniczny, bez żadnego voodoo AJAX. Jeśli wywołasz te same zewnętrzne funkcje PHP we wspomnianym pliku synchronicznym, możesz uznać, że używają one tego samego interfejsu API co wersja po stronie klienta, chociaż użycie tutaj terminu „API” może nie dać żadnej prawdziwej przejrzystości.

W końcu API jako interfejs programowania aplikacji i tak naprawdę odnosi się do każdego programu, który wywołuje poza własnym procesem. Jeśli piszesz projekt, który ma zarówno front-end, jak i back-end, mogą to być AJAX / PHP / MySQL jak wyżej lub MS Access / SQL Server, warto sprecyzować, w jaki sposób będziesz się nawiązywał, jeśli nie z innego powodu, niż po to, aby ułatwić wiedzieć, gdzie szukać, gdy coś się zepsuje.

(Temat publicznego API jest czymś zupełnie innym. W naszym powyższym przykładzie tylko adres URL wyświetlany w kliencie jest „publicznym API”. Cała reszta jest w istocie „prywatna”. dowolnego kodu, nad którym nie masz kontroli, aby wywołać wewnętrzny interfejs API, albo wprost zaprzeczasz takim wynikom, albo zastrzegasz sobie do tego prawo w przyszłości.

DougM
źródło
3
W rzeczywistości frontend to kod po stronie klienta (HTML, JavaScript), a backend to kod serwera (PHP, Python, Ruby).
Pithikos,
-3

interfejs API obsługuje żądania HTTP, takie jak GET, POST, FETCH, DELETE ..., których można używać w zależności od dostępu do tokena w celu pobierania danych w określonym formacie, takim jak json, xml itp.

Te „dane” można wykorzystać we własnej aplikacji w celu uzyskania interfejsu API (Application Programming Interface), który jest publicznie dostępną usługą internetową do gromadzenia danych, które mogą być interesujące dla niektórych odbiorców.

Te dane mogą zwrócić zestaw danych oznaczających, że nie powiodło się, lub pobrać dane z serwera API

Interfejs API ma być zapleczem, dlatego można go używać w dowolnym środowisku frontonu. Oznacza to, że można go używać w aplikacji internetowej, Android, iOS ... obsługującej żądania https

Balibrera
źródło