API 方法没有 Post 任何东西,也没有得到任何东西

API method which does not Post anything and does not Get anything

我有下一个API方法:

所以这是 API 方法,它不 Post 任何东西,也不 return(Get) 任何东西。

在这种情况下,我应该使用 Post,Put 还是 Get? 目前我正在使用 Get,可以吗? 当我们 return 一些数据时使用 Get 是有意义的,但我不需要 return 任何数据。 同时我不需要post任何对象,我只需要标识符。

根据 'id' 和 'file name' 从服务器上的文件夹恢复:

[HttpGet]//**put?
[Route("api/[controller]/[action]/{restoreFileName}")]
public async Task<IActionResult> RestoreDB(string restoreFileName)
{
    //Restore database from folder A on server base on restoreFileName
    return new OkResult();
}

从文件夹A复制到文件夹B:

[HttpGet]//**put?
[Route("api/[controller]/{id}/[action]/{filename}")]
public async Task<IActionResult> CopyFromAtoB(int id, string fileName)
{
       //Copy from folder A to folder B base on 'id' and 'file name'.
       return new OkResult();
}

问题是您的 API 不遵循 REST 原则。端点应表示您可以对其执行不同操作(GET、POST、PUT、PATCH、DELETE)的资源。您的端点:

[Route("api/[controller]/[action]/{restoreFileName}")]

不代表任何资源。它只是一个 URI 路径。 controlleractionrestoreFileName 都不是资源。

所以,你有两个选择。

  1. 忽略任何 REST 约定,只创建您自己的自定义路径。如果选择此选项,则无需执行任何操作。你可以使用任何你想要的动词,任何你想要的命名。然而,即使在这种情况下,POST动词也是最自然的(它确实对系统做了一些改变)。
  2. 重构您的 API 以遵循 REST。

如果你选择第二个选项,那么你的路线应该是这样的:

[HttpPost]    
[Route("api/fileManager/files/{filename}")]

并使用您将在 POST 正文中发送的命令来区分对文件的操作,例如:{action: "restore"}