Erhalte die Ausgabe von RestSetResponse, ohne eine HTTP-Anfrage zu machen

9

Ich habe einen minimalen (Beispiel) REST-Endpunkt test/people.cfc :

%Vor%

Wie bereits erwähnt hier und in der ColdFusion-Dokumentation :

  

Hinweis: ColdFusion ignoriert den Rückgabewert der Funktion und verwendet den Antwortsatz mit der Funktion RestSetResponse() .

Daher scheint der Rückgabetyp void für die Funktion für die REST-Funktion korrekt zu sein.

Nun kann ich es von einer CFM-Seite aus aufrufen:

%Vor%

Ich möchte jedoch die Funktion aufrufen, ohne eine HTTP-Anfrage zu stellen.

Erstens scheinen die REST-CFCs im REST-Verzeichnis nicht zugänglich zu sein. Dies kann einfach dadurch gelöst werden, dass im ColdFusion Admin-Panel ein Mapping zum Root-Pfad des REST-Service erstellt wird.

Ich kann dann tun:

%Vor%

Dies ruft die Funktion direkt auf und die Ausgabe zeigt an, dass sie die Person hinzugefügt hat. Die Antwort der REST-Funktion ist jedoch im Äther verschwunden. Weiß jemand, ob es möglich ist, HTTP-Statuscode und Inhalt der Antwort (mindestens - vorzugsweise alle HTTP-Header) zu erhalten?

Update - Integrationstest-Szenario :

Dies ist ein Anwendungsfall (von mehreren), bei dem das Aufrufen des REST-Endpunkts über eine HTTP-Anforderung Knock-On-Effekte hat, die durch direktes Aufrufen des Endpunkts als Methode einer Komponente gemildert werden können.

> %Vor%

Wenn Sie jede REST-Funktion über eine HTTP-Anforderung aufrufen, werden die Daten nach jeder Anforderung an die Datenbank übergeben - das Bereinigen zwischen den Tests, bei denen die Daten festgeschrieben wurden, kann sehr kompliziert werden und führt häufig dazu, dass die Datenbank in einem früheren Zustand zurückgehalten wird ( was dazu führt, dass Integrationstests während Flashbacks nicht parallel zu anderen Tests und Perioden der Nichtverfügbarkeit ausgeführt werden können). Die Möglichkeit, die REST-Endpunkte ohne viele atomare HTTP-Anforderungen aufzurufen und sie stattdessen in einer einzigen Transaktion zu bündeln, die zurückgesetzt werden kann, bedeutet, dass der Test in einer einzelnen Benutzersitzung durchgeführt werden kann.

Wie kann ich also den HTTP-Statuscode und den Antworttext erhalten, die von RestSetResponse() festgelegt wurden, wenn ich eine Instanz der REST-Komponente erstelle und die Funktion aufruft, die den REST-Pfad direkt darstellt (ohne Verwendung einer HTTP-Anfrage)?

    
MT0 24.01.2017, 13:05
quelle

1 Antwort

0

@ MT0,

Die Lösung wird * einige Schritte umfassen:

  1. Ändern remote void function create in remote struct function create
  2. Hinzufügen var result = {"status" = 201, "content" = SerializeJSON( people )}
  3. Ändern Sie Ihren restSetResponse(..) -Aufruf zu restSetResponse(result)
  4. Hinzufügen return result;

* Die Lösung wird derzeit nicht funktionieren, b / c ColdFusion-Ticket CF-3546046 wurde nicht repariert vollständig. Ich habe Adobe gebeten, es erneut zu öffnen und CF-4198298 eingereicht, um dieses Problem zu beheben. Nur für den Fall, dass CF-3546046 nicht erneut geöffnet wird. Bitte sehen Sie sich meinen letzten Kommentar zu CF-3546046 an, und zögern Sie nicht, für ein Ticket zu stimmen. Wenn beides vollständig behoben ist, können die oben aufgeführten Änderungen an Ihrem Code die korrekte HTTP-Antwort beim Aufruf über REST setzen und die Rückgabevariable der Funktion zurückgeben, wenn sie direkt aufgerufen wird. Hinweis: Sie können auch eine headers struct w / in der result struct in Schritt 2 angeben, wenn Sie auch Kopfzeilen zurückgeben möchten, wenn die Funktion direkt aufgerufen wird.

Danke !, -Aaron Neff

    
Aaron Neff 01.02.2017 07:39
quelle

Tags und Links