小编dev*_*v'd的帖子

用于克隆资源的REST API设计

我正在使用swagger编写一个YAML文档来设计用于克隆资源的RESTful API方法.我有几个选择,不知道哪个最好.有人可以建议吗?

选项:

  1. 放弃将资源对象克隆到消费者的责任(消费者将值分配给新对象上的属性然后创建新对象),该过程需要包含两个对API的请求:针对资源的GET源对象,然后POST到该资源以创建新的.这感觉就像消费者有太多的责任.
  2. 使用提供COPY方法的WebDAV HTTP扩展(请参见此处).看来这正是我想克隆的内容.但是,我想尽可能坚持标准方法
  3. POST到/ {resource}?resourceIdToClone = {id}其中resourceIdToClone是一个可选参数.这将与我已经用于创建资源的API路径冲突,我在其中向POST主体添加模式.这意味着使用POST来/ {resource} /进行创建和克隆,这会违反SRP.
  4. 添加名为"CloneableResource"的新资源并对/ CloneableResource/{resource_type}/{resource_source_id}执行POST.对于克隆绵羊的例子,你要对/ CloneableResource/Sheep/10进行POST.这样,就可以坚持使用标准的HTTP方法,不会与任何其他资源路径(或SRP违规)发生冲突.但是,我会在域中添加一个新的,可能是多余的类型.当消费者想要对此资源执行POST以外的任何操作时,我也无法想到这样的场景,所以对我来说似乎是一种代码味道.
  5. 对/ resource/{id}?方法=克隆进行GET.这里的一个优点是不需要额外的资源,它可以通过简单的可选查询字符串参数来确定.我知道这里存在的一个风险是,如果URL位于网页中,则可能会使用GET方法提供发布或删除功能,因为它可能会被搜索引擎抓取.

谢谢你的帮助!

api rest post yaml webdav

9
推荐指数
2
解决办法
7046
查看次数

406返回JSON对象时出错 - 意外内容

一些同事和我有一个问题,即ajax调用的响应返回一些意想不到的内容.而不是使用各种属性获取简单的JSON对象,result.responseText的值是通用406状态错误页面的HTML标记,表示浏览器不接受MIME类型.

这样的电话是这样的:

$.ajax({
    url: '/promociones/cincogratis/canjear-codigo-promocional',
    type: this.method,
    data: $(this).serialize(),
    success: function (result) {
           $('.promotion_banner .loader').hide();
           $('.promotion_banner').html(result);
    },
    error: function (result) {
           var obj = result.responseText;
           if (obj.isRedirect) {
                   document.location = obj.redirectUrl;  
           }
           else {
                   $('.promotion_banner .loader').hide();
                   $(".error-wrapper").removeClass("hidden");                           
                   var generic_error = document.getElementById('generic_error').value;
                   $(".error-wrapper p").html(generic_error);
           }
    },
    beforeSend: function() {
           $('.promotion_banner .loader').show();
    }
});
Run Code Online (Sandbox Code Playgroud)

控制器对呼叫的响应如下:

Response.StatusCode = (int)HttpStatusCode.NotAcceptable; // 406
return Json(new { errorMessage = LocalErrorMessages.Website_Promotions_FreeFiver_General_Problem, isRedirect = false } );
Run Code Online (Sandbox Code Playgroud)

我们希望result.responseText包含errorMessage和isRedirect的键值,但它们不在那里.

值得指出的是,这个代码是多租户的,由当前的应用程序和另一个代码共享,它的工作非常好.

我们尝试过:
- 配置IIS以显示详细的错误响应而不是自定义页面以获取更多详细信息 - 为解决问题提供了额外的帮助.
- 允许所有响应内容类型到呼叫
- 更改我们网站的文化(目前是es-ES) …

ajax json

6
推荐指数
1
解决办法
774
查看次数

标签 统计

ajax ×1

api ×1

json ×1

post ×1

rest ×1

webdav ×1

yaml ×1