这个模型是由伦纳德·理查森(Leonard Richardson)开发的,试图根据对REST施加约束的遵守程度对API进行分类。分类有四个级别:最低的是级别0,它表示不那么兼容的实现,最高的是级别3,它是最兼容的,因此也是最RESTful的。
级别0:POX(普通的旧XML)的沼泽
使用HTTP协议作为传输方式,但类似于经典RPC的应用程序状态,经典RPC有:SOAP和XML-RPC,
举例说明:就像去镇上唯一的外卖餐厅,订购比萨饼,炒饭和咖喱
自然语言:
- 客户:您提供哪种食物?
- 餐厅:我们提供意大利美食,例如比萨饼和馅饼,中国美食,例如炒饭和虾饼干,以及印度美食,包括咖喱和波普托饼。
- 客户:太好了。我想要一个比萨饼,一些炒饭和一个咖喱
- 餐厅:这是您的比萨饼,炒饭和咖喱
API代码:
GET/FoodService HTTP 1.1 |
级别1:资源
区分不同的资源,但使用一种HTTP方法。
举例:喜欢去不同的外卖餐厅,在意大利餐厅订购比萨饼,在中国餐厅订购炒饭,在印度餐厅订购咖喱。
自然语言:
- 客户:(去披萨餐厅)我想要一个比萨饼,里面有意大利辣香肠和额外的奶酪馅料。
- 餐厅:好。这是你的披萨。那将是15英镑。
- 顾客:(去中国餐馆)我要炒饭
- 餐馆:好的。这是你的米饭。那将是2.50英镑。
- 顾客:(去印度餐厅)我要咖喱
- 餐厅:好的。这是你的咖喱。那将是5.60英镑。
API代码:
POST/restaurants/italian/orders HTTP 1.1 |
级别2:HTTP动词
充分利用所有HTTP动词和资源名词。
j举例:就像去意大利餐厅并指定比萨饼馅料,然后去中国餐厅取消炒饭,然后去印度餐厅更改poppadoms的数量。
自然语言:
- 客户:(去披萨店)我要披萨。
- 餐厅:好。这是你的披萨。那将是15英镑。
- 顾客:(去中国餐馆)我要炒饭
- 餐馆:好的。这是你的米饭。那将是2.50英镑。
- 客户:(返回比萨餐厅)我想更改订单并添加额外的浇头。我要橄榄和凤尾鱼。哦,做两个比萨。
- 餐厅:好的,我们可以做到。给我们您的披萨,我们将添加这些浇头。
- 顾客:(去一家印度餐馆)我要咖喱和两个poppadoms。
- 餐厅:好的,这是您的订单。那将是8.20英镑。
- 顾客:我改变了主意。我只想取消订单。
- 餐厅:好。您的新产品已被取消。
API代码:
PUT/restaurants/italian/orders/123456 HTTP 1.1 |
级别3:超媒体控件
使用HATEOAS(超媒体作为应用程序状态的引擎)指导应用程序状态。
举例:就像去披萨餐厅订购披萨,然后服务员为您带来披萨,然后告诉您您刚刚订购了什么,还有哪些其他披萨以及如何获取有关每个披萨的更多信息。
自然语言:
- 客户:(去披萨店)我要披萨。
- 餐厅:这是您的披萨。您点了一份意大利辣香肠比萨饼。您想知道我们还有哪些额外的浇头吗?我们还有其他比萨饼:玛格丽特(Margherita),四个季节和四个奶酪。您想要有关每个人的更多信息吗?
API代码:
POST/restaurants/italian/orders HTTP 1.1 |