2017-12-22 7 views
1

genannt wird ich folgendes Szenario haben:Blocking eine Antwort REST-API, bis eine andere API

Es gibt zwei API-Aufrufe in einer Anwendung: api1 und api2.

api1 wird mehrmals von mehreren Benutzern aufgerufen. Ich möchte alle Antworten von api1 Anrufe blockieren, bis api2 aufgerufen wird. api2 wird mit einem Parameter aufgerufen, der vorschlagen würde, die Antwort eines spezifischen Aufrufs api1 "freizugeben". Wenn also api2 aufgerufen wird, wird ein bestimmter api1 Anruf antworten, der bis jetzt blockiert wurde (es kann mehrere api1 Freigaben basierend auf dem Parameter geben, der in api2 Anruf übergeben wird).

Ich möchte dies in Grails implementieren. Ich weiß nicht, wie ich das umsetzen soll. Irgendwelche Ideen?

Teilen Sie, wenn Sie eine andere Sprache oder Framework kennen, die verwendet werden kann, um dies zu implementieren.

Antwort

1

Eine Lösung, die mir in den Sinn kam, ist die Verwendung eines Mutex auf dem api1 Anruf und die Freigabe in der api2. Möglicherweise müssen Sie das Timeout des api1 berücksichtigen.

EDIT

Nun können Sie ein Wörterbuch/Karte Mutex ist, wo jeder Anruf einen entsprechenden Mutex hat. Wenn ein Client api1 aufruft, generiert der Server einen Mutex und fügt ihn dem Wörterbuch hinzu. Außerdem versucht er, den Mutex zu sperren (der standardmäßig gesperrt ist). Danach müssen Sie unter api2 nur die ID angeben, die Sie im Wörterbuch verwendet haben, um den Mutex zu entsperren.

+0

Es ist mir auch eingefallen. Aber ich kannte die praktische Umsetzung des genauen Szenarios mit Mutex nicht. Timeout ist kein Problem, da ich es in der aufrufenden Anwendung (Consumer-Anwendung, die die APIs aufruft) bewusst auf einen ausreichend hohen Wert setzen würde. –

+0

Können Sie auf die Implementierung hinweisen? –

+1

Nun, Sie können ein Wörterbuch/eine Map von Mutex haben, wo jeder Aufruf einen entsprechenden Mutex hat. Wenn ein Client api1 aufruft, generiert er einen Mutex und fügt ihn dem Dictionary hinzu. Außerdem versucht er, den Mutex zu entsperren (standardmäßig gesperrt). Danach müssen Sie auf der api2 nur die ID angeben, die Sie im Wörterbuch verwendet haben, um den Mutex zu entsperren. –

Verwandte Themen