使用HTTP方法设计API

问题描述 投票:0回答:1

我最近在Netskope系统设计面试中被问到以下问题,即为以下功能设计API(带有HTTP方法的完整URL路径),我无法很好地回答,所以我被拒绝了。我将我的解决方案粘贴在下面。我无法使用谷歌搜索找到解决方案。您能提供一些解决方案吗?

1. Create Virtual Machine
2. Reboot Virtual Machine
3. Shutdown Virtual Machine

我的解决方案

POST www.netskope.com/v1/create_vm/args?machineid="ABC"
POST www.netskope.com/v1/reboot_vm/args?machineid="ABC"
POST www.netskope.com/v1/shutdown_vm/args?machineid="ABC"
api rest soap graphql grpc
1个回答
0
投票

以下是对您的解决方案的一些想法以及它可能被拒绝的原因:

  1. 端点格式:在您的初始解决方案中,您使用的是 URL 包含操作的结构(create_vm、reboot_vm、 shutdown_vm) 作为端点路径的一部分。虽然这是一个 直接的方法,它不是那么有条理或直观 使用您的 API 的开发人员和客户。
  2. HTTP 方法:您对所有三个方法都使用 HTTP POST 方法 行动。虽然 POST 可用于创建资源,但它 通常用于修改或添加新资源的操作。 重新启动和关闭虚拟机是可以执行的操作 考虑过对现有资源进行修改,但可能不会 完美适合“创建”操作。
  3. 查询参数:您将机器 ID 作为查询传递 范围。虽然这是一种有效的方法,但更常见的是 在请求正文中包含需要更多操作的数据 信息。查询参数通常用于过滤或 识别资源,不一定是为了传递详细信息 采取行动所需的信息。
  4. 缺乏一致性:您最初的解决方案缺乏一致性 URL 结构和 HTTP 方法使用方面。每个动作都有一个 不同的 URL 和相同的 HTTP 方法 (POST) 用于所有 操作,这可能会让开发人员感到困惑并减少 API 的使用 用户友好。
  5. RESTful Design:RESTful 设计原则旨在一致性, 可预测性和直观的 URL 结构。这包括使用 适当的 HTTP 方法(POST、GET、PUT、DELETE)并表示 URL 路径中清楚地显示了资源和操作。

1。创建虚拟机:

要创建虚拟机,您可以使用 HTTP POST 方法以及资源 URL(请注意,

www.netskope.com
部分在此及以后被截断,因为这是描述 REST 端点的常见情况):

  • 终点:
    POST /v1/virtual-machines
  • 请求正文: JSON 有效负载,包含创建虚拟机所需的信息
  • 响应:指示成功或失败的状态代码,可能还有新创建的虚拟机详细信息

请求示例:

POST /v1/virtual-machines
Content-Type: application/json

{
    "machineId": "ABC",
    "specs": {
        "cpu": 2,
        "memory": "4GB",
        "storage": "100GB"
    }
}

响应示例:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "success",
    "message": "Virtual machine created successfully",
    "vmDetails": {
        "machineId": "ABC",
        "status": "running",
        "specs": {
            "cpu": 2,
            "memory": "4GB",
            "storage": "100GB"
        }
    }
}

2。重启虚拟机:

要重新启动虚拟机,您可以使用 HTTP POST 或 PUT 方法:

  • 终点:
    POST /v1/virtual-machines/{machineId}/reboot
  • 请求正文:空或最小,因为重新启动通常不需要其他信息
  • 响应:指示成功或失败的状态代码,以及可能的消息

请求示例:

POST /v1/virtual-machines/ABC/reboot

响应示例:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "success",
    "message": "Virtual machine rebooted successfully"
}

3.关闭虚拟机:

要关闭虚拟机,您可以再次使用 HTTP POST 或 PUT 方法:

  • 终点:
    POST /v1/virtual-machines/{machineId}/shutdown
  • 请求正文:空或最小
  • 响应:指示成功或失败的状态代码,以及可能的消息

请求示例:

POST /v1/virtual-machines/ABC/shutdown

响应示例:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "status": "success",
    "message": "Virtual machine shutdown successful"
}
© www.soinside.com 2019 - 2024. All rights reserved.