数据库表可以是REST中的资源实体吗?

时间:2012-04-09 09:34:25

标签: database rest service resources models

我想创建使用数据库表作为资源实体的RESTful Web服务。

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

如何为此设计模型?通常,模型是为资源实体所在的表创建的,但我的资源不存在于任何表中,而是数据库本身!

这可能还是我没有任何意义?请帮帮我!

先谢谢。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,因为REST依赖于非常抽象和灵活的资源概念。只要界面服从统一界面(标准方法,使用URI等),您就可以在幕后执行任何。制作HTTP接口的最佳理由之一是隐藏丑陋的实现细节并提供这样一个统一的接口。

你所选择的语言或环境中究竟如何做到这一点是一个更为详细的问题,但基本知识将类似于CherryPy伪代码:

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))

你必须自己连接'db'连接逻辑,并弄清楚客户端应该对字段定义有多少控制(以及最适合传达的媒体类型,以及如何解析该媒体类型到CREATE TABLE语句的有效SQL中)。您还希望 比“DROP TABLE {用户输入}”更好的安全性;)但希望这能让您走上正确的轨道。