2011-01-07 9 views
1

Ich habe eine Frage zum Design einer Anwendung, an der ich gerade arbeite.HTTP HTTP RESTfull API-Anfragen vom HTTP-Server an meine Anwendung weiterleiten

Ich machte eine monolithische Java-Anwendung mit Sockets rund um die Uhr geöffnet, so etwas wie ein Spieleserver. Ich versuche nur zu sagen, dass es sich um eine einzelne jar-Anwendung handelt und nicht um eine modulare Servlet/Page-basierte Webanwendung.

Ich möchte jetzt eine RESTful API zu dieser Anwendung hinzufügen. So können Personen/Clients HTTP-Anfragen an meine Anwendung stellen, um bestimmte Informationen zu erhalten. Aufgrund der monolithischen Natur meiner Java-Anwendung bin ich unsicher, wie dies implementiert werden soll. Eine weitere wichtige Sache: Ich erwarte mehrere Anfragen pro Sekunde, also wäre es schön, wenn ich einen bestehenden http-Server mit den Anfragen betrauen könnte und sie irgendwie an meine App weiterleiten könnte, um eine Antwort einzurichten und den http-Server senden zu lassen es wieder.

Einige Dinge, die ich gedacht habe: statt Zuordnung zu Servlets auf Anfrage

  • wickeln meine Anwendung in einer tomcat Anwendung, obwohl ich nicht sicher bin, ob tomcat kontinuierlich eine Anwendung ausführen kann.

  • Öffnen Sie einen Socket und parsen eingehende HTTP-Anforderungen selbst (oder es gibt wahrscheinlich eine Lib für das?). Ich befürchte, dass dies Auswirkungen auf die Leistung haben wird, und würde lieber vorhandene http-Server verwenden, da sie für hohen Datenverkehr optimiert sind.

  • Verwenden Sie einen bestehenden http-Server, um die Anfragen zu bearbeiten (Apache, LightTP, ...) und leiten Sie Anfragen über Dinge wie scgi an meine App weiter oder verwenden Sie einen Server, der via XMLRPC weiterleiten kann. Gibt es andere Technologien/Protokolle, um dies zu tun?

Irgendwelche Ratschläge, wie man damit umgeht? Danke!

Antwort

0

Ich würde Ihren REST-Service-Endpunkt so weit wie möglich von Ihrer ursprünglichen Anwendung entkoppeln. Dadurch können Sie skalieren (mehrere Server für Ihren REST-Endpunkt hinzufügen), aber auch Ihre ursprüngliche Anwendung ändern, ohne dass Sie Ihre REST-API direkt ändern müssen.

Clients <== REST (HTTP) ==> RESTful endpoint <== legacy (sockets) ==> Legacy backend

So ist Ihr REST-Server eine der Hand ein Dienstleister für Ihre Kunden, aber gleichzeitig auch einen Client für Ihre ursprüngliche Backend steht an.

Ich würde die RESTful-API entwerfen und dann eines der vorhandenen REST-Frameworks für Java auswählen, wie Restlet, und den REST-Service selbst implementieren. Gleichzeitig können Sie mithilfe von Sockets mit der Implementierung eines Gateways zwischen dem REST-Server und Ihrem ursprünglichen Back-End beginnen.

Achten Sie auf Skalierbarkeit und Leistung (d. H., Sie möchten möglicherweise Verbindungspools für die rest <=> backend Bridge verwenden und nicht einen Socket pro eingehende API-Anforderung erzeugen) und überlegen Sie sich auch die möglichen Vorteile von HTTP. Sie könnten davon profitieren, wenn Sie Caching usw. verwenden können, soweit dies Ihre Backend-Anwendungslogik erlaubt.