我想创建使用数据库表作为资源实体的 RESTful Web 服务。
PUT myservice/table/new creates a new table in database
DELETE myservice/table/1 deletes a table in database and so on...
我如何为此设计模型?通常模型是为资源实体所在的表创建的,但我的资源不存在于任何表中,而是数据库本身!
这是可能的还是我没有任何意义?请帮我!
提前致谢。
是的,这是可能的,因为 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”连接逻辑,并弄清楚客户端应该对字段定义有多少控制权(以及哪种媒体类型最适合传达它,以及如何将该媒体类型解析为有效的 SQL对于 CREATE TABLE 语句)。您还需要比“DROP TABLE {user input}”更好的安全性;)但希望这能让您走上正轨。