Java 设计web应用程序REST API以保存状态
我必须设计restapi来保存我的web应用程序的状态。 我的web应用程序可能包含多个webflow,每个webflow可能包含多个页面。因此,我需要一个API,可以保存/检索数据逐页 设计端点的方法很少:Java 设计web应用程序REST API以保存状态,java,web-services,rest,web-applications,api-design,Java,Web Services,Rest,Web Applications,Api Design,我必须设计restapi来保存我的web应用程序的状态。 我的web应用程序可能包含多个webflow,每个webflow可能包含多个页面。因此,我需要一个API,可以保存/检索数据逐页 设计端点的方法很少: 1) /app/{app_name}/webflow/{flow_name}/page/{page_name} Request Body : application/x-www-form-urlencoded page_data : {...json ..}
1) /app/{app_name}/webflow/{flow_name}/page/{page_name}
Request Body : application/x-www-form-urlencoded
page_data : {...json ..}
page_data_type : JSON -- define the page data type
2) /app/{app_name}/webflow/{flow_name}?page={page_name}
Request Body : application/x-www-form-urlencoded
page_data : {...json ..}
page_data_type : JSON ---- define the page data type
3)/app/webflow/page/
Request Body : application/x-www-form-urlencoded
app_name : text
flow_name : text
page_name : text
page_data : {...json ..}
page_data_type : JSON -- define the page data type
4) All the above 3 ways but to remove app from the uri
and add it to the request parameters.
最合适的设计方法是什么?因为将所有识别资源的数据放在URL中,将资源的所有细节数据放在有效负载中被认为是一种良好的做法,第一个选项似乎是最好的方法。如果您需要在webflow的上下文之外访问页面,我推荐两个URL(假设您将其作为REST样式的API使用) 通过这种方式,您可以独立于webflow更改页面 每个页面都可以向其参与的webflow返回URL列表,每个webflow都可以向其当前页面集合返回URL列表 这也打开了在一个请求中执行移动操作的能力,即对概念上包含子项的项的更新
GET /app/app_1/webflow/flow_1
(content) Pages = [ page_1, page_2, page_5 ];
POST /app/app_1/webflow/flow_1
(content) Pages = [ page_1, page_4, page_5 ];
GET /app/app_1/webflow/flow_1
(content) Pages = [ page_1, page_4, page_5 ];
使用当前方法,移动只能由两个后续调用执行
GET /app/app_1/webflow/flow_1
(content) Pages = [ page_1, page_2, page_5 ];
DELETE /app/app_1/webflow/flow_1/pages/page_2
PUT /app/app_1/webflow/flow_1/pages/page_4
(and I don't even know where to specify the ordering)
记住,这是API。它只是一种使数据可访问的方法。不要试图让API过于紧密地反映底层的数据结构。如果将绑定显式化,有时会发现底层数据结构无法轻松更新,因为这会在API中造成大量复杂情况
最后,如果有意义的话,你可能想考虑用{APPYNAME}做同样的事情。
你通常想要传递“发现性”——这意味着你希望能够浏览树。例如,
/app/{app\u name}/webflow/
应列出所有webflow,/app/{app\u name}/webflow/{flow\u name}/page
应列出所有页面等
这有力地表明,选项1更好——始终遵循URL结构更符合逻辑 因为你的“页面”与资源有直接关系,所以它应该在路径中,所以第一个是最好的方法。你能解释一下它如何比选项1更好吗?我指的是选项1,更新了我的答案。当谈到#2时,我建议避免这样的方法,因为实际上它也是有效负载,在
?
之后放置的内容。如何获取给定webflow的页面详细信息?@VineetSingla HTTP获取webflow,查看其返回值。它包含详细说明页面的数据结构。然后HTTP获取每个页面的详细信息。
GET /app/app_1/webflow/flow_1
(content) Pages = [ page_1, page_2, page_5 ];
DELETE /app/app_1/webflow/flow_1/pages/page_2
PUT /app/app_1/webflow/flow_1/pages/page_4
(and I don't even know where to specify the ordering)