2016-04-27 1 views
1

Wir haben einen Monolithen, der heute sowohl als eine Geschäftsmaschine fungiert, als auch eine Web-UI bedient. Die Arbeit, die ich gerade mache, besteht darin, die UI-Verantwortlichkeit auf eine neue Komponente zu trennen, die eine Angular-Anwendung für Browser bereitstellt. Diese neue Komponente kommuniziert über REST mit der Business Engine und anderen Komponenten.Wie man über den Entwurf und den Zweck eines REST-api denkt, das durch eine Angular.js App verbraucht wird

So haben wir eine äußere REST-api und eine innere REST-api. Der äußere REST nimmt Anfragen von einem UI-Client entgegen und dient dazu, neue Anforderungen an die innere REST-API zu stellen.

Der Grund für die Einführung der äußeren REST-api ist, dass der Client nur eine einzige Anlaufstelle für die Kommunikation mit dem System haben sollte, um so unter anderem Sicherheitsbedenken abzubauen.

Meine Frage ist, ob ich die äußere REST-api als reinen Proxy entwerfen soll, der jede Anfrage nur an eine strukturell äquivalente Anfrage auf der inneren REST-API weitergibt. Oder wenn ich der äußeren REST-api erlauben soll, das von der inneren REST-api zurückgegebene Modell zu massieren, so dass die Antwort mehr mit einem viewModel übereinstimmt, das die Angular App direkt nutzen kann. Die Auswahl steht also zwischen dem Massieren des Modells auf der Client-Seite, dh in der Steuerung Angular.js oder in der äußeren REST-Komponente. Normalerweise würde ich auf der Serverseite massieren, um die clientseitige Entwicklung so schlank wie möglich zu gestalten. Aber das liegt wahrscheinlich daran, dass ich hauptsächlich ein Backend-Entwickler bin und es vorziehe, dort zu programmieren. Mit dem Aufkommen von Angular.js und dergleichen mag die bevorzugte Methode sein, dieses Anliegen an die Client-Seite weiterzugeben? Was ist deine Meinung?

+0

Warum brauchen Sie innere REST-api? Normalerweise würde man eine Bibliothek erstellen, um zwischen inneren Projekten/Anwendungen zu teilen, um den Code NICHT zu duplizieren. –

+0

Die innere REST-API ist teilweise der existierende Monolith (der seine API über verschiedene Kanäle ausgibt, REST ist eins) und andere bereits existierende Microservices. Der Kontext besteht also aus vielen Anwendungen, und das Ziel besteht darin, die Architektur des gesamten Unternehmens schrittweise zu verbessern und nicht alles durch eine Bibliothek zu ersetzen. –

Antwort

0

Wir haben ein ähnliches Problem, sagen wir Google OAuth verwenden, um Benutzer zu loggen.

Wir verpacken die äußeren REST-APIs immer über unser Backend SpringMVC. Das heißt, wenn wir eine API /google/res von Google aufrufen möchten, verpacken wir sie in eine interne API /internal/res. Und das Frontend (Angular) ruft immer /internal/res an.

Ein sehr einfacher Grund ist, dass wir die Benutzerberechtigungen einfacher kontrollieren können. Auch können wir die APIs der hinzufügen in mehr Informationen massieren. Beispielsweise verknüpfen wir einen Sitzungsbenutzer mit dem Google-Konto.

In Bezug auf öffentliche APIs, denke ich, es ist in Ordnung, äußere RESTful-Dienste von Front-End zu rufen. Aber meiner Meinung nach ist Backend-Verarbeitung immer vorzuziehen, um Sicherheit zu gewährleisten.

Verwandte Themen