2012-04-09 6 views
1

Ich möchte RESTful Webservice erstellen, der Datenbanktabellen als Ressourcenentitäten verwendet.Können Datenbanktabellen Resource Entities in REST sein?

PUT myservice/table/new creates a new table in database 
DELETE myservice/table/1 deletes a table in database and so on... 

Wie entwerfe ich ein Modell dafür? Normalerweise werden die Modelle für Tabellen erstellt, in denen sich Ressourcenentitäten befinden, aber meine Ressourcen sind in keiner Tabelle vorhanden, außer in der Datenbank selbst!

Ist das möglich oder mache ich keinen Sinn? Bitte hilf mir!

Vielen Dank im Voraus.

+0

ist es möglich ... ABER: was genau hast du probiert? was ist dein Ziel ? was funktioniert nicht? – Yahia

+0

Mein Ziel ist es, einen Dienst zu erstellen, mit dem ich dynamisch Tabellen erstellen kann und jede Tabelle wird wiederum als Ressource verwendet. Lassen Sie mich ein Beispiel geben Sagen wir, ich möchte eine Berichtsdaten-Datenbank erstellen. Viele Kunden pushen Daten hinein und jeder hat seine eigene Tabelle. jetzt, wenn ein neuer Client auftaucht, muss eine neue Tabelle im laufenden Betrieb erstellt werden, und er kann Daten dorthin schieben. Hast du einen Kern davon? lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank! – mssrivatsa

+0

ok ... und: was hast du probiert? was funktioniert nicht? – Yahia

Antwort

1

Ja, das ist möglich, weil REST auf einem sehr abstrakten und flexiblen Ressourcenkonzept beruht. Solange die Schnittstelle der einheitlichen Schnittstelle gehorcht (Standardmethoden, URIs, etc), können Sie alles Sie hinter den Kulissen tun. Einer der besten Gründe, um eine HTTP-Schnittstelle zu etwas zu machen, ist es, hässliche Implementierungsdetails zu verstecken und nur eine solche einheitliche Schnittstelle zu präsentieren.

Genau wie Sie das tun in Ihrer Sprache oder Umgebung der Wahl eine weit detailliertere Frage, aber die Grundlagen wäre so etwas wie dieses CherryPy Pseudo-Code sein:

class Table: 
    exposed = True 
    def __init__(self, tablename): 
     self.tablename = tablename 
    def PUT(self): 
     fields = parse_fields(cherrypy.request.body.read()) 
     db.execute("CREATE TABLE %s (%s)" % (self.tablename, fields)) 
    def DELETE(self): 
     db.execute("DROP TABLE %s" % self.tablename) 

class Tables: 
    def _cp_dispatch(self, vpath): 
     return Table(vpath.pop(0)) 

Sie werden am verkabeln müssen die 'db'-Verbindungslogik selbst und herauszufinden, wie viel Kontrolle der Client über die Felddefinitionen haben sollte (und welcher Medientyp am besten ist, um dies zu kommunizieren, und wie dieser Medientyp für die CREATE TABLE-Anweisung in gültiges SQL zu parsen ist). Sie wollen auch viel bessere Sicherheit als "DROP TABLE {Benutzereingabe}";) Aber hoffentlich bringt Sie das auf den richtigen Weg.

+0

Vielen Dank für Ihre Antwort! Es hat die meisten Dinge beseitigt. – mssrivatsa