gpt4 book ai didi

c# - 发布项目时,获取项目而不是尝试将 ID 推回结果是否是正确的形式?

转载 作者:行者123 更新时间:2023-12-04 04:01:41 26 4
gpt4 key购买 nike

我正在使用 System.Net.Http.HTTPClient在一个新的 Xmanarin 项目的一些示例代码中,我有一个可以正常工作的方法。我的问题是:这是将对象返回给调用者的普遍接受的方法吗?

 public async Task<bool> AddItemAsync(Item item)
{
if (item == null || !IsConnected)
return false;

var serializedItem = JsonConvert.SerializeObject(item);

var response = await client.PostAsync($"api/item", new StringContent(serializedItem, Encoding.UTF8, "application/json"));

/// dig out the URI and fetch it back to be restful...
var json = await client.GetStringAsync(response.Headers.Location);
item= await Task.Run(() => JsonConvert.DeserializeObject<Item>(json));

return response.IsSuccessStatusCode;
}

最佳答案

TL;DR: Whilst it seems in-efficient, this pattern keeps the client code base very simple and allows for the server to manipulate the resource in other ways after applying business logic/rules.


您是否应该在 PUT 之后立即重新获得资源?/ POST ?
这不限于创建事件,第一点解决创建请求。
  • 如果与您的帖子相关的服务器端处理有限或没有,请调用 GET紧跟在 POST 之后的相同资源将具有完全相同的内容,或者您​​可以轻松地在客户端更新更改,那么您只会通过等待相同的数据返回来减慢用户体验
  • 如果可以从响应中确定资源的 uri(因此 Id/key),那么您可以简单地从 Location 中解析该值。或响应中的其他 header ,并相应地更新客户端上的资源。

  • 一些 API 实际上会在响应正文中返回资源的内容,或者会有一个选项,您可以将其作为请求的 header 发送以包含内容。如果您的 API 已经在该响应中返回内容,并且该响应结构与您的应用所需的结构相匹配,则立即调用 GET再次没有值(value)。
  • 查看首选 Header options对于您的 API,OData v4 prefer header支持return=representation这将在响应中返回资源。


  • 作为一般客户端模式,调用 GET在创建或更新之后立即比尝试将 Id 和日期戳注入(inject)对象的代码更少,这意味着您隐含地支持 API 上的业务逻辑可能已经修改您的资源(至少提供了一个 Id)的概念,所以非常对 API 本身的演化具有弹性。
    作为一般规则,创建操作在许多应用程序设计中很少发生,因此尽管在带宽方面效率较低,但保持代码清洁和可管理的成本是可以接受的。
    你能一直用 response.Headers.Location吗识别资源
    通常使用 webapi,这是一个可靠的 REST 标准约定,但请继续阅读...

    in regard to Web API / REST there are many server-side libraries and conventions that CAN be used that will affect the default behaviour from a server point of view, usually they will return a correct Location header in the response to standard CRUD requests

    but that doesn't mean that the developer used these built in behaviours, or didn't override them!


  • 这个讨论从 API 的角度突出了这个论点:
    REST response - should I put the URL of the new resource in the header, body, or both?
  • 最终,API 开发人员可以影响每个单独请求的内容和标题,因此您确实需要查阅 API 文档或开发人员才能确定。

  • 决定您确实需要刷新资源后,如果您的 API url 约定意味着对 POST 的响应位置始终是检索该资源的 uri,那么请务必继续使用您拥有的代码,请注意不是所有的 API,也不是所有的请求都是一样的。

    关于c# - 发布项目时,获取项目而不是尝试将 ID 推回结果是否是正确的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62958224/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com