我對所有REST API使用標準APIResponse對象接口。描述REST API的動態響應類型
public interface IAPIResponse
{
IAPIError Error { get; set; }
IEnumerable<dynamic> Results { get; set; }
void AddResult(string groupName, object data);
}
這是我如何使用標準的APIResponse對象。
public async Task<IActionResult> Get()
{
try
{
var response = new UsersGetResponse {
Users = await _someService.GetAll()};
_apiResponse.AddResult("UsersGetResponse", response);
return new ObjectResult(_apiResponse);
}
catch (Exception ex)
{
_apiResponse.Error = new APIError(ex.Message, 500);
return new ObjectResult(_apiResponse);
}
}
對_someSerice.GetAll()的調用返回以下用戶對象的列表。
public interface IUser
{
string Id { get; set; }
bool IsAdmin { get; }
string Name { get; set; }
string Email { get; set; }
}
這是父類UsersGetResponse
public class UsersGetResponse
{
public IList<User> Users { get; set;}
}
這將產生以下JSON的屬性。
{
"error": null,
"results": [
{
"UsersGetResponse": {
"Users": [
{
"id": 171161,
"isAdmin" : true,
"name": "Dave Smith",
"email": "[email protected]"
},
{
"id": 171162,
"isAdmin" : false,
"name": "Jane Doe",
"email": "[email protected]"
}
]
}
}
]
}
如果我像這樣使用ProducedResponseType註釋。
[ProducesResponseType(typeof(IAPIResponse), StatusCodes.Status200OK)]
我只在swagger中得到以下示例JSON。
{
"error": {
"message": "string",
"number": 0
},
"results": [
{}
]
}
我想看看是否有正確傳達給我的API的消費者,我有一個包含了像UsersGetResponse具體的對象的動態結果的標準APIResponse對象的方式。
感謝您花時間提供反饋。我意識到這是事業。我正在尋找解決方案。我甚至試圖讓APIResponse成爲一個通用的,但我得到了相同的結果。 – aaronR