API 方法没有 Post 任何东西,也没有得到任何东西
API method which does not Post anything and does not Get anything
我有下一个API方法:
- 恢复数据库(根据文件名)。
- 将文件夹 A 中的内容复制到文件夹 B
所以这是 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 路径。 controller
、action
或 restoreFileName
都不是资源。
所以,你有两个选择。
- 忽略任何 REST 约定,只创建您自己的自定义路径。如果选择此选项,则无需执行任何操作。你可以使用任何你想要的动词,任何你想要的命名。然而,即使在这种情况下,
POST
动词也是最自然的(它确实对系统做了一些改变)。
- 重构您的 API 以遵循 REST。
如果你选择第二个选项,那么你的路线应该是这样的:
[HttpPost]
[Route("api/fileManager/files/{filename}")]
并使用您将在 POST
正文中发送的命令来区分对文件的操作,例如:{action: "restore"}
我有下一个API方法:
- 恢复数据库(根据文件名)。
- 将文件夹 A 中的内容复制到文件夹 B
所以这是 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 路径。 controller
、action
或 restoreFileName
都不是资源。
所以,你有两个选择。
- 忽略任何 REST 约定,只创建您自己的自定义路径。如果选择此选项,则无需执行任何操作。你可以使用任何你想要的动词,任何你想要的命名。然而,即使在这种情况下,
POST
动词也是最自然的(它确实对系统做了一些改变)。 - 重构您的 API 以遵循 REST。
如果你选择第二个选项,那么你的路线应该是这样的:
[HttpPost]
[Route("api/fileManager/files/{filename}")]
并使用您将在 POST
正文中发送的命令来区分对文件的操作,例如:{action: "restore"}