HTTP Server

Forum for developers

HTTP Server

Beitragvon apfelmaennchen » Sa Okt 25, 2008 10:17 am

Ich hab mal wieder eine Verständnisfrage - und zwar möchte ich z.B. dass Bookmark API so gestalten, dass z.B. ein Request der Form:
Code: Alles auswählen
http://yacy-peer:8080/bookmarks/{hash}

das Lesezeichen {hash} anzeigt, ohne, dass es zwingend eine Datei {hash} mit zugehörigen Servlet gibt.
Kennt unser HTTP-Server so etwas wie Re-Write Regeln, die z.B. solche Requests auf
Code: Alles auswählen
http://yacy-peer:8080/bookmarks/get.xml?id={hash}

verbiegen?
Für jede andere (bessere) Lösung bin ich natürlich ebenfalls dankbar!

Gruß!
apfelmaennchen

EDIT: Steuern möchte ich das dann via der Methoden GET, POST, PUT, DELETE, so wie man das von RESTful Web Services eben kennt.
apfelmaennchen
 
Beiträge: 429
Registriert: Mo Aug 20, 2007 7:06 pm

Re: HTTP Server

Beitragvon Low012 » Sa Okt 25, 2008 12:00 pm

PUT ist derzeit nicht implementiert (http://forum.yacy-websuche.de/viewtopic.php?f=6&t=801&p=5671#p5659) und bei DELETE weiß ich es nicht. Ich denke, das hat aber hauptsächlich den Grund, dass es dafür bisher keine Anwendung gab.
Low012
 
Beiträge: 2214
Registriert: Mi Jun 27, 2007 12:11 pm

Re: HTTP Server

Beitragvon apfelmaennchen » Sa Okt 25, 2008 12:38 pm

Danke für den Hinweis!

Es ist aber noch etwas trickreicher als nur dem httpd beizubringen via PUT eine Datei anzulegen.
In meinem Fall müsste der Server ja wissen, dass er bei PUT auf eine Resource im Unterordner bookmarks/ nicht eine Datei, sondern einen DB-Eintrag anlegen/updaten muss! Ich hatte mir das eben so vorgestellt, dass alle HTTP-Anfrage z.B. auf einen speziellen Ordner (Files, Bookmarks, Annotationen, Topics) beim jeweiligen Servlet bzw. bei einer Java-Klasse landen, welches je nach Methode (GET, PUT, POST, DELETE) entsprechend reagieren kann.

Wenn ich das jetzt richtig verstanden habe, dann müsste ich eine Art httpdBookmarksHandler oder allgemeiner httpRESTfulHandler bauen...

Gruß!
apfelmaennchen

EDIT:
YaCy scheint für POST auch nur den Content-Type: application/x-www-form-urlencoded, also key/value Paare zu akzeptieren bzw. korrekt zu verarbeiten.
Um z.B. ein Bookmark als XML via POST zum Server zu übertragen, sollte httpdFileHandler für den Content-Type: application/xml z.B. ein Property-key 'xmldata' mit dem Post-body als Inhalt anlegen.

Analog zu multipart sieht ein erster Schnellschuss folgendermaßen aus:
Code: Alles auswählen
} else if ((requestHeader.containsKey(httpHeader.CONTENT_TYPE)) &&
           (requestHeader.get(httpHeader.CONTENT_TYPE).toLowerCase().equals("application/xml"))) {
           // pass a application/xml body as a single property xmldata
           byte[] buffer = null;
                       if (length != -1) {
                          buffer = new byte[length];
                          int bytesRead = body.read(buffer);
                          assert bytesRead == buffer.length;
                          argc = 1;
                          args.put("xmldata", new String(buffer, "UTF-8"));                          
                  }
}


Da ich nicht so gerne ungefragt und ohne doppelten Boden im httpd-Code rumbastle, wer ist denn der verantwortliche Entwickler?
apfelmaennchen
 
Beiträge: 429
Registriert: Mo Aug 20, 2007 7:06 pm

Re: HTTP Server

Beitragvon DanielR » So Okt 26, 2008 7:32 pm

apfelmaennchen hat geschrieben:Kennt unser HTTP-Server so etwas wie Re-Write Regeln

Ja, aber nur hardcoded. Denn die ganzen Servlets, werden ja "umgebogen" (von .html auf das ausgeführte .java zusammen mit der Template-Engine). Das ist alles im HttpdFileHandler drin.

apfelmaennchen hat geschrieben:Wenn ich das jetzt richtig verstanden habe, dann müsste ich eine Art httpdBookmarksHandler oder allgemeiner httpRESTfulHandler bauen...

Ja, das wäre wohl das beste. Denn es läuft ja über HTTP, wäre für den FileHandler wohl zu viel extra Zeugs.

apfelmaennchen hat geschrieben:Da ich nicht so gerne ungefragt und ohne doppelten Boden im httpd-Code rumbastle, wer ist denn der verantwortliche Entwickler?
#
Wenn du einen eignen Httpd...Handler baust bist du das ;) Ich weiß nicht ob irgendwer dafür zuständig ist, aber ich hab mich da auch schon mal etwas umgeschaut, habe aber auch nur einen groben Überblick.
DanielR
 
Beiträge: 395
Registriert: Di Feb 12, 2008 2:22 pm

Re: HTTP Server

Beitragvon Orbiter » Do Nov 06, 2008 12:16 pm

hier scheint kein anderer Maintainer für den httpd als ich dazusein?
apfelmaennchen hat geschrieben:YaCy scheint für POST auch nur den Content-Type: application/x-www-form-urlencoded, also key/value Paare zu akzeptieren bzw. korrekt zu verarbeiten.
Um z.B. ein Bookmark als XML via POST zum Server zu übertragen, sollte httpdFileHandler für den Content-Type: application/xml z.B. ein Property-key 'xmldata' mit dem Post-body als Inhalt anlegen.

Interessant, hier lerne ich wieder mal dazu. An application/xml habe ich noch nie gedacht. Dein Codeschnipsel sieht ganz ok aus.
Nur frage ich mich wie man solch ein POST von html aus generiert? gar nicht? Wie willst du das konkret beschicken?
Orbiter
 
Beiträge: 5797
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main


Zurück zu YaCy Coding & Architecture

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste