Python对象层次结构和REST资源?
我目前在使用RESTAPI的Python应用程序(使用Twisted)中遇到了一个“架构”问题,我正在寻找反馈 警告!前面有很长的柱子 让我们假设以下对象层次结构:Python对象层次结构和REST资源?,python,rest,resources,hierarchy,composition,Python,Rest,Resources,Hierarchy,Composition,我目前在使用RESTAPI的Python应用程序(使用Twisted)中遇到了一个“架构”问题,我正在寻找反馈 警告!前面有很长的柱子 让我们假设以下对象层次结构: class Device(object): def __init__(): self._driver=Driver() self._status=Status() self._tasks=TaskManager() def __getattr__(self, attr_name): if h
class Device(object):
def __init__():
self._driver=Driver()
self._status=Status()
self._tasks=TaskManager()
def __getattr__(self, attr_name):
if hasattr(self._tasks, attr_name):
return getattr(self._tasks, attr_name)
else:
raise AttributeError(attr_name)
class Driver(object):
def __init__(self):
self._status=DriverStatus()
def connect(self):
"""some code here"""
def disconnect(self):
"""some code here"""
class DriverStatus(object):
def __init__(self):
self._isConnected=False
self._isPluggedIn=False
我还有一个相当深的对象层次结构(上面的元素只是它的一个子部分),因此,现在在RESTAPI中,这为我提供了以下资源(我知道,rest不是关于url层次结构,而是关于媒体类型,但为了简单起见):
/休息/环境
/rest/environments/{id}
/rest/environments/{id}/设备/
/rest/environments/{id}/devices/{deviceId}
/rest/environments/{id}/devices/{deviceId}/driver
/rest/environments/{id}/devices/{deviceId}/driver/driverstatus
几个月前,我从一个“肮脏”的soap类型Api切换到REST,但我不确定如何处理似乎增加的复杂性:
- 装置
- 设备状态
- 司机
- 驾驶员状态
致S.洛特:
- 我所说的“过于分散的资源”的意思是,许多不同的子资源基本上仍然应用于同一个服务器端实体
- 对于“连接”:那么这将是“DriverStatus”资源的修改版本?我认为连接总是存在的,因此使用“放”,但这会是坏事吗?考虑“放”应该是幂等的?p>
- 你说的“停止编码和重新思考”是对的,这就是为什么我问了所有这些问题,并把问题写在纸上,以获得更好的概述 -问题是,现在基本的“真实世界对象”对我来说是有意义的rest资源/资源集合,它们通过POST、GET、UPDATE、DELETE进行了正确的操作,但我很难理解rest方法,因为我并不本能地将它们视为“资源”
站点
对象表示路径部分/rest
,但是路径中的环境
必须是资源
。从这里开始,您必须在环境
的渲染方法中自己处理层次结构。您获得的请求
对象将具有一个后路径
属性,该属性为您提供路径的剩余部分(即/rest/environments
之后)。您必须解析出id
,检测路径中是否给出了devices
,如果是,则将路径的其余部分(和请求)传递到设备集合。不幸的是,Twisted不会为您处理此决定。您可以使用站点
对象表示路径部分/rest
,但路径中的环境
必须是资源
。从这里开始,您必须在环境
的渲染方法中自己处理层次结构。您获得的请求
对象将具有一个后路径
属性,该属性为您提供路径的剩余部分(即/rest/environments
之后)。您必须解析出id
,检测路径中是否给出了devices
,如果是,则将路径的其余部分(和请求)传递到设备集合。不幸的是,Twisted不会为您处理此决定。规则1。其余是关于对象的。不是方法
其余的“资源”变得过于分散
错。总是假的。REST资源是独立的。它们不能“太”支离破碎
我现在拥有的不是一个设备资源,而是所有这些资源:
设备设备状态驱动程序状态
这些都是有道理的
从[RESTful]的角度来看,拥有大量sub是正常的吗
每个映射到单独python类的资源
事实上,它们没有意义。这就是你的问题
设备是一种东西/rest/environments/{id}/devices/{deviceId}
它有地位。您应该考虑将状态和设备信息一起作为描述设备的单个复合文档。
仅仅因为关系数据库是规范化的,并不意味着RESTful对象需要像数据库一样精确地规范化。虽然它更简单(许多框架使它非常非常简单),但它可能没有意义
考虑连接始终存在,因此