1

我正试图以正确的方式以一种平静的方式表示以下方法......

假设我有 x 台服务器,它们运行 Windows、Linux 和 Unix。

每个服务器都可以对它们执行 ping、关闭和用户操作。

API 不了解服务器,因此请求必须提供 IP 地址以及服务器类型和操作类型(它确实知道)。

考虑到这一点,这些简单的 URL 会浮现在脑海,但一点也不平静:

/192.168.1.3/Linux/ping 
/192.168.1.5/windows/shutdown 

我应该走宁静的路线吗?或者对于一个简单的 Web API 来说,上述内容是否可行?

如果安静,它会看起来像这样吗?

GET /servertypes/{servertypeId}/actions/{actionId}?serverip=192.168.1.4
4

2 回答 2

2

这对我来说似乎更有意义:

GET /servertypes/{servertypeId}/{serverip}/{action}

于 2013-03-02T23:19:45.347 回答
0

在我看来,你应该重新考虑你的设计。

您通过将命令名称放在 URL 中来有效地覆盖 HTTP 方法的语义,这些 URL 旨在表示范围信息。GET请求不应导致状态的变化。忽略底层协议不被视为 RESTful。

您在此处所拥有的看起来像是一个不真正符合 REST 原则的 RPC 模型。在我看来,您正在尝试将方形钉子锤入圆孔。

您还应该问自己是否真的有必要公开底层操作系统。你想调用系统特定的命令吗?是否可以运行任何可执行文件或仅运行几个常见的可执行文件?您应该关心它是grep在 UNIX 机器上还是findstr在 Windows 机器上?客户是否关心他们使用的是 Windows 还是 Linux 机器?

You could go for a simple pattern similar to what Uzar Sajid suggested. It would probably work alright. Just don't call it RESTful cause it's not.

于 2013-03-02T23:46:13.583 回答