我有下一个API方法:
所以这是API方法,它不发布任何东西,也不返回(获取)任何东西。
我应该使用Post,Put或Get这样的情况吗? 目前我正在使用Get,这样可以吗? 当我们返回一些数据时使用Get是有意义的,但我不需要返回任何数据。 同时我不需要发布任何对象,我只需要标识符。
从基于' id'的服务器上的文件夹恢复和'文件名':
[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();
}
答案 0 :(得分:1)
问题是您的API不遵循REST原则。端点应表示可以执行不同操作的资源(GET,POST,PUT,PATCH,DELETE)。你的终点:
[Route("api/[controller]/[action]/{restoreFileName}")]
不代表任何资源。它只是一个URI路径。 controller
,action
或restoreFileName
都不是资源。
所以,你有两个选择。
POST
动词是最自然的动词(它确实会对系统进行一些更改)。如果您选择第二个选项,那么您的路线应如下所示:
[HttpPost]
[Route("api/fileManager/files/{filename}")]
并使用您将在POST
正文中发送的命令来区分对文件的操作,例如:{action: "restore"}