Skip to content
  • About
  • Friends
  • About
  • Friends
The Blog of Philippmy personal Site of Things
  • About
  • Friends
Written by Philipp on 2007-11-02

RESTliches

Personal

Ich habe lange Zeit nicht mehr gemeldet.
Das lag zum einen daran, dass es viel drumherum zu tun gab und zum zweiten daran, dass ich momentan viele vage Dinge habe, die ich erstmal in eine wirkliche Form bringen will. So ungefähr wie eine Zettelsammlung, die man dann endlich Llochen und einheften möchte.

Ich fange erstmal damit an, dass ich meine – bisherigen – Funktionen zu meinen Objekten sortiere. Bisher habe ich an Objekten nur User und Entries. Wohlgemerkt, es geht hier nicht um Methoden sondern einzig und alleine um Funktionen. D.h. die Funktion wäre das was in der URI dann stehen würde.
z.B. /Users/1/inbox. Dann wäre Users also mein Objekt (dies wird auf Java Ebene dann von der Klasse UserService abgebildet) und inbox wäre die Funktion. Natürlich wird es in der Klasse UserService eine Methode Namens inbox geben, allerdings auch zusätzliche Methoden, welche nicht dem REST Paradigma unterworfen sind.

Hier also meine kleine Übersicht:

  • Entries
    • create
    • update
    • delete
    • send
    • list
    • mark
    • Dependencies
  • Users
    • create
    • update
    • delete
    • login
    • logout
    • list
    • Inbox
    • Outbox

Eine Erklärung erfolgt in einem späteren Post. Sobald ich die einzelnen Funktionen eingegrenzt habe. Zudem haben sich folgende Änderungen ergeben:

  1. Ein Eintrag kann mehrere Empfänger haben. Damit kommen folgende Problem auf mich zu:
    1. Ist ein Eintrag erledigt, wenn ein Empfänger ihn als erledigt markiert? Oder alle? Vielleicht wahlweise?
    2. Wenn es möglich ist, Einträge “weiter zu vermitteln”, wie stellt man sicher, dass die anderen Empfänger erhalten bleiben? Kann der aktuelle Empfänger weitere hinzufügen?
    3. Wie bildet man das in der Datenbank ab (zum Glückt gibt es dafür ja schon eine geeignete Lösung)

    Dazu gesellen sich dann noch Probleme, dass man zum Beispiel ja eindeutig einen aktuell Verantwortlichen für einen Eintrag ermitteln sollen kann. Bei wechselnden Empfängern und vor allem mehreren Empfänger könnte das schwierig werden. Vor allem müsste man dann auch über eine erweitere Rollenverteilung nachdenken. Stichwort Verantwortlich und Bearbeiter.

  2. eistens ist es notwendig, dass eine Aufgabe in Unteraufgaben “aufgebrochen” wird. So soll es möglich sein, dass ein Eintrag beliebig(?) viele Untereinträge auf beliebig(?) tief verschachtelten Ebenen hat. Dazu wird man den “Erledigt Status” von “unten nach oben durchreichen” müssten. Wenn aus Entry 12 Entry 12.1 und Entry 12.2 erledigt sind, sollte auch Entry 12 als erledigt markiert sein.

Zu guter Letzt noch ein paar Links, die sich so fanden:

Ajax mit HTTP Basic Auth (YUI) [1] womit schon mal ein Problem gelöst ist, was in meinem Hinterkopf festsaß.
REST with JSP [2] irgendwie sehe ich nur noch innoQ – so langsam wird man paranoid :-).
REST Web Services [3] ist ein schönes Beispiel zu REST und da wird auch der Unterschied zu SOAP deutlich.

Share this:

  • Share on X (Opens in new window) X
  • Share on Facebook (Opens in new window) Facebook

Like this:

Like Loading...

Related

3 comments

  • Stefan Tilkov has written: 2007-11-03 at 21:32

    Eine Funktion sollte definitiv nie in der URI stehen, wenn das ganze RESTful sein soll – d.h. Deine URIs sollten immer “Dinge” Identifizieren. Als Funktionen/Verben/Methoden hast Du nur GET/PUT/POST/DELETE und musst daher alles, was da tun möchtest, auf eine Kombination von Ressource + Standardmethode abbilden.
    Oder ist Dir das klar und ich habe Dich missverstanden?

  • Phillip Ghadir has written: 2007-11-04 at 10:58

    Ich würde das REST-Design noch ein wenig anders auffassen wollen:

    /Users/1/inbox
    
    • “/Users” ist eine Ressource, die einfach eine Menge von Benutzern repräsentiert.
    • “/Users/1” identifiziert die Ressource des Benutzers mit der ID 1.
    • “/Users/1/inbox” identifiziert den Eingangskorb des Benutzers mit der ID 1. Der Eingangskorb ist selbst eine Ressource.

    Dir bleibt überlassen, wie Du die Funktionalität schneiden möchtest. Allerdings könnte es helfen, die Implementierung erst zu skizzieren, wenn Du die Schnittstelle (d.h. die Ressourcensicht) entworfen hast.
    Zwar wirst Du immer Rückkopplungen zwischen Schnittstellenentwurf und Implementierung haben, während Du entwickelst, aber den nötigen Transfer von Services und Operationen auf Ressourcen und URIs solltest Du nicht unterschätzen, denn die Ressourcerepräsentationen bekommen bei REST eine sehr große Bedeutung:
    Entweder Du wendest implizit oder explizit für komplexe Aufgaben das Befehlsmuster an, so dass eine (generische) Abbildung von der REST-Schnittstelle auf die klassische Implementierung Umbauten erfordert.
    Um den Aufwand dafür gering zu halten, sollte Du den Zustandsraum modelliert und verstanden haben, um eine Degeneration der Implementierung bei der unbedarften Erweiterung um Funktionalität zu vermeiden.
    Die REST-Grundlagen haben Stefan und ich einem Artikel in der ObjektSpektrum beschrieben. Das Buch SOA-Expertenwissen enthält ebenfalls 3 Artikel zu REST.

  • Mati has written: 2008-03-08 at 01:20

    Hi
    You must clean comments..

Leave a ReplyCancel reply

Archives

  • August 2025
  • November 2023
  • February 2023
  • January 2023
  • April 2020
  • January 2018
  • December 2017
  • May 2017
  • February 2016
  • September 2015
  • December 2014
  • August 2014
  • June 2014
  • March 2014
  • February 2014
  • September 2013
  • August 2013
  • July 2013
  • November 2012
  • October 2012
  • September 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • January 2011
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • January 2010
  • November 2009
  • October 2009
  • September 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • March 2007
  • February 2007
  • January 2007
  • December 2006
  • November 2006
  • September 2006
  • June 2006
  • May 2006
  • April 2006
  • March 2006
  • February 2006
  • January 2006

Calendar

November 2007
M T W T F S S
 1234
567891011
12131415161718
19202122232425
2627282930  
« Oct   Dec »

Categories

  • Bash
  • Bochum
  • Build
  • CCC
  • CLI
  • Coderwall
  • Coventry
  • DB
  • Edu
  • Freenas
  • Gitlab
  • Graphics
  • Hacking
  • iOS
  • Java
  • Javascript
  • Mac
  • NAS
  • Network
  • nexenta
  • Perl
  • Personal
  • PHP
  • Play! Framework
  • Proxmox
  • ruby
  • Ruby on Rails
  • Security
  • SmartOS
  • Snippets
  • Sound
  • Tech
  • Testing
  • Tooling
  • Twitter
  • UI
  • Uncategorized
  • Video
  • Virtualisierung
  • ZFS

Copyright The Blog of Philipp 2026 | Theme by ThemeinProgress | Proudly powered by WordPress

%d