代码之家  ›  专栏  ›  技术社区  ›  Sam McAfee

如何以一种宁静的方式实现资源“编辑”表单?

  •  10
  • Sam McAfee  · 技术社区  · 16 年前

    我们正在尝试为我们现在拥有的应用程序实现一个RESTAPI。我们希望使用RESTAPI公开各种资源的读/写功能。我们如何实现这个“形式”部分?我通过创建基本上作为方法调用的RESTful URL并返回数据,了解了如何公开数据的“读取”:

    GET /restapi/myobject?param=object-id-maybe
    

    …并返回表示某些数据结构的XML文档。好的。

    但是,通常情况下,在Web应用程序中,“编辑”会涉及两个请求:一个请求加载资源的当前版本并用该数据填充表单,另一个请求将修改后的数据发布回表单。

    但是我不知道您如何使用REST所映射到的HTTP方法来做同样的事情。这是一个看跌期权,对吧?有人能解释一下吗?

    (附加考虑:UI主要是用Ajax完成的)

    —— 更新:这绝对有帮助。但是,我仍然对服务器端有点困惑?显然,我不是简单地处理这里的文件。在服务器上,响应请求的代码应该过滤请求方法以确定如何处理它?这是读写之间的“切换”?

    4 回复  |  直到 8 年前
        1
  •  2
  •   Mark Cidade    16 年前

    如果您是通过纯HTML提交数据的,那么您只需执行基于post的表单。投递请求发送到的URI 不应该 是要修改的资源的URI。您应该发布到每次添加新创建的资源的集合资源(新资源的URI位于 位置 报头和A 二百零二 状态代码)或发布到更新程序资源,该资源使用请求内容(或自定义头)中提供的URI更新资源。

    如果您使用的是XMLHttpRequest对象,那么可以设置方法将数据放入并提交到资源的URI。如果服务器为尚未存在的资源提供了有效的URI,那么也可以使用空表单。第一个输入将创建资源(返回 二百零二 )如果后续的Puts是相同的数据,那么它将不做任何事情,或者修改现有的资源(在这两种情况下都是 二百 除非出现错误,否则返回)。

        2
  •  11
  •   gsamaras a Data Head    8 年前

    你可以使用许多不同的选择。在 microformats wiki 也被休息的JSON人员引用。尽可能接近标准,真的。

     Operate on a Record
    
    GET /people/1
        return the first record 
    DELETE /people/1
        destroy the first record 
    POST /people/1?_method=DELETE
        alias for DELETE, to compensate for browser limitations 
    
    GET /people/1/edit
        return a form to edit the first record 
    PUT /people/1
        submit fields for updating the first record 
    POST /people/1?_method=PUT
        alias for PUT, to compensate for browser limitations 
    
        3
  •  3
  •   Brad Wilson    16 年前

    我认为您需要将数据服务与Web UI分开。在提供数据服务时,RESTful系统是完全合适的,包括使用浏览器不支持的动词(如put和delete)。

    在描述用户界面时,我认为大多数人会将“restful”与“好的、可预测的URL”混淆。在描述Web用户界面时,我不会完全担心纯RESTful的URL语法。

        4
  •  0
  •   Matt Sheppard    16 年前

    加载应该只是一个普通的GET请求,保存新数据应该是一个发布到当前拥有数据的URL…

    例如,从 http://www.example.com/record/matt-s-example 然后,更改数据,并将新数据发布回相同的URL。

    创建新记录时可以使用Put请求(即将数据放在当前不存在的URL上),但实际上,只发布可能是开始使用的更好方法。