Jeśli serwer nie może już inicjować żądań, a mimo to musi czasem o coś zapytać — potrzebny jest inny wzorzec. MRTR jest właśnie nim.
Jak działa
Zamiast wysyłać osobne żądanie do klienta, serwer kończy bieżące wywołanie wynikiem oznaczającym, że potrzebuje danych wejściowych. Wynik ten niesie listę pytań oraz nieprzejrzysty blok stanu. Klient zbiera odpowiedzi od użytkownika i ponawia pierwotne wywołanie, dołączając odpowiedzi oraz zwrócony wcześniej stan w niezmienionej postaci.
Blok stanu jest dla klienta nieczytelny — jego zadaniem jest wyłącznie odesłać go dokładnie takim, jaki dostał.
Dlaczego tak
Wzorzec pasuje do bezstanowego rdzenia specyfikacji. Skoro cały stan podróżuje w treści komunikatu, żadna instancja serwera nie musi utrzymywać otwartego połączenia ani pamiętać, co się działo. Dowolna instancja może podjąć pracę tam, gdzie została przerwana — co dopiero umożliwia sensowne skalowanie poziome.
Dodatkowo jedno żądanie może połączyć kilka pytań naraz, zamiast wykonywać osobne obiegi dla każdego z osobna.
Co zastępuje
MRTR wchodzi w miejsce żądań inicjowanych przez serwer, czyli dotychczasowych mechanizmów elicitation, sampling i roots. Nie zmienia tego, o co serwer może poprosić — zmienia sposób, w jaki prośba jest dostarczana.
Status
Wzorzec wprowadzono jako SEP-2322. Warto śledzić dokumentację, bo nazwy pól w schemacie mogą jeszcze ulegać zmianom.