Loading ...
Sorry, an error occurred while loading the content.

Multiple POSTs of the same entity to a collection

Expand Messages
  • Robert Cerny
    Hi, Let s assume we have a resource representing a collection, e.g. / people, and the server has a mechanism to decide whether representations that are posted
    Message 1 of 6 , Oct 1, 2008
    • 0 Attachment
      Hi,

      Let's assume we have a resource representing a collection, e.g. /
      people, and the server has a mechanism to decide whether
      representations that are posted to /people refer to the same person.
      If a posted person is new, the server creates a new resource, e.g. /
      people/1 and sends a 201 response with a location header. If the
      server recognizes the posted person, he does not create a new
      resource, but rather performs a PUT. It would be desirable to inform
      the client that no new resource was created by sending a different
      response code than 201, but which one?

      Thanks in advance,

      Robert Cerny
      robert_cerny@...
    • Julian Reschke
      ... How about 200? BR, Julian
      Message 2 of 6 , Oct 1, 2008
      • 0 Attachment
        Robert Cerny wrote:
        >
        >
        > Hi,
        >
        > Let's assume we have a resource representing a collection, e.g. /
        > people, and the server has a mechanism to decide whether
        > representations that are posted to /people refer to the same person.
        > If a posted person is new, the server creates a new resource, e.g. /
        > people/1 and sends a 201 response with a location header. If the
        > server recognizes the posted person, he does not create a new
        > resource, but rather performs a PUT. It would be desirable to inform
        > the client that no new resource was created by sending a different
        > response code than 201, but which one?
        > ...

        How about 200?

        BR, Julian
      • Robert Cerny
        Hi Julian, ... I am torn between 200 and 204. After rereading the relevant section in the HTTP RFC [1], i might favor 204. What do you think? In my setup it
        Message 3 of 6 , Oct 1, 2008
        • 0 Attachment
          Hi Julian,

          On Oct 1, 2008, at 10:36 AM, Julian Reschke wrote:

          > How about 200?

          I am torn between 200 and 204. After rereading the relevant section
          in the HTTP RFC [1], i might favor 204. What do you think? In my
          setup it would be good, if the response contains a Location header
          with the URL that the server uses to refer to that person and it
          should not contain a body.

          Best regards,

          Robert Cerny

          [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2
        • Miika Makinen
          To my understanding 303 makes sense if the client is adviced in the future to PUT directly to the resource rather than POSTing to the collection.
          Message 4 of 6 , Oct 1, 2008
          • 0 Attachment
            To my understanding 303 makes sense if the client is adviced in the future to PUT directly to the resource rather than POSTing to the collection.

            On Wed, Oct 1, 2008 at 5:24 PM, Robert Cerny <robert_cerny@...> wrote:
            Also an option! Hmm. Now it is between 204 and 303.

            On Oct 1, 2008, at 12:15 PM, Miika Makinen wrote:

            what about 303?

            On Wed, Oct 1, 2008 at 4:57 PM, Robert Cerny <robert_cerny@...> wrote:

            Hi Julian,

            On Oct 1, 2008, at 10:36 AM, Julian Reschke wrote:

            > How about 200?

            I am torn between 200 and 204. After rereading the relevant section
            in the HTTP RFC [1], i might favor 204. What do you think? In my
            setup it would be good, if the response contains a Location header
            with the URL that the server uses to refer to that person and it
            should not contain a body.

            Best regards,

            Robert Cerny

            [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2



            Robert Cerny




          • Robert Cerny
            ... That s how i read it too. But the resource IS updated by the POST in my case, so even though the clients learns about the URL with the 303, he does not
            Message 5 of 6 , Oct 1, 2008
            • 0 Attachment
              On Oct 1, 2008, at 12:35 PM, Miika Makinen wrote:

              To my understanding 303 makes sense if the client is adviced in the future to PUT directly to the resource rather than POSTing to the collection.

              That's how i read it too. But the resource IS updated by the POST in my case, so even though the clients learns about the URL with the 303, he does not need to reissue the request with a PUT to that URL.

              Robert Cerny



            • Subbu Allamaraju
              303 does not mean that the client needs to a PUT at that Location. In the context of POST, it just means that, whatever changes that the client asked for have
              Message 6 of 6 , Oct 1, 2008
              • 0 Attachment
                303 does not mean that the client needs to a PUT at that Location. In
                the context of POST, it just means that, whatever changes that the
                client asked for have been applied, and the client can get a response
                from that other location. This is similar to the redirect-after-post
                pattern, which is explicitly discussed under the section (10.3.4) that
                defines 303.

                Subbu

                On Oct 1, 2008, at 9:46 AM, Robert Cerny wrote:

                >
                > On Oct 1, 2008, at 12:35 PM, Miika Makinen wrote:
                >
                >> To my understanding 303 makes sense if the client is adviced in the
                >> future to PUT directly to the resource rather than POSTing to the
                >> collection.
                >
                > That's how i read it too. But the resource IS updated by the POST in
                > my case, so even though the clients learns about the URL with the
                > 303, he does not need to reissue the request with a PUT to that URL.
                >
                > Robert Cerny
                > robert_cerny@...
                >
                >
                >
                >
                >
                > <!-- #ygrp-mkp{ border: 1px solid #d8d8d8; font-family: Arial;
                > margin: 14px 0px; padding: 0px 14px; } #ygrp-mkp hr{ border: 1px
                > solid #d8d8d8; } #ygrp-mkp #hd{ color: #628c2a; font-size: 85%; font-
                > weight: bold; line-height: 122%; margin: 10px 0px; } #ygrp-mkp
                > #ads{ margin-bottom: 10px; } #ygrp-mkp .ad{ padding: 0 0; } #ygrp-
                > mkp .ad a{ color: #0000ff; text-decoration: none; } --> <!-- #ygrp-
                > sponsor #ygrp-lc{ font-family: Arial; } #ygrp-sponsor #ygrp-lc
                > #hd{ margin: 10px 0px; font-weight: bold; font-size: 78%; line-
                > height: 122%; } #ygrp-sponsor #ygrp-lc .ad{ margin-bottom: 10px;
                > padding: 0 0; } --> <!-- #ygrp-mlmsg {font-size:13px; font-family:
                > arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}
                > #ygrp-mlmsg table {font-size:inherit;font:100%;} #ygrp-mlmsg select,
                > input, textarea {font:99% arial,helvetica,clean,sans-serif;} #ygrp-
                > mlmsg pre, code {font:115% monospace;*font-size:100%;} #ygrp-mlmsg *
                > {line-height:1.22em;} #ygrp-text{ font-family: Georgia; } #ygrp-
                > text p{ margin: 0 0 1em 0; } #ygrp-tpmsgs{ font-family: Arial;
                > clear: both; } #ygrp-vitnav{ padding-top: 10px; font-family:
                > Verdana; font-size: 77%; margin: 0; } #ygrp-vitnav a{ padding: 0
                > 1px; } #ygrp-actbar{ clear: both; margin: 25px 0; white-
                > space:nowrap; color: #666; text-align: right; } #ygrp-
                > actbar .left{ float: left; white-space:nowrap; } .bld{font-
                > weight:bold;} #ygrp-grft{ font-family: Verdana; font-size: 77%;
                > padding: 15px 0; } #ygrp-ft{ font-family: verdana; font-size: 77%;
                > border-top: 1px solid #666; padding: 5px 0; } #ygrp-mlmsg
                > #logo{ padding-bottom: 10px; } #ygrp-reco { margin-bottom: 20px;
                > padding: 0px; } #ygrp-reco #reco-head { font-weight: bold; color:
                > #ff7900; } #reco-grpname{ font-weight: bold; margin-top: 10px; }
                > #reco-category{ font-size: 77%; } #reco-desc{ font-size: 77%; }
                > #ygrp-vital{ background-color: #e0ecee; margin-bottom: 20px;
                > padding: 2px 0 8px 8px; } #ygrp-vital #vithd{ font-size: 77%; font-
                > family: Verdana; font-weight: bold; color: #333; text-transform:
                > uppercase; } #ygrp-vital ul{ padding: 0; margin: 2px 0; } #ygrp-
                > vital ul li{ list-style-type: none; clear: both; border: 1px solid
                > #e0ecee; } #ygrp-vital ul li .ct{ font-weight: bold; color: #ff7900;
                > float: right; width: 2em; text-align:right; padding-right: .5em; }
                > #ygrp-vital ul li .cat{ font-weight: bold; } #ygrp-vital a{ text-
                > decoration: none; } #ygrp-vital a:hover{ text-decoration:
                > underline; } #ygrp-sponsor #hd{ color: #999; font-size: 77%; } #ygrp-
                > sponsor #ov{ padding: 6px 13px; background-color: #e0ecee; margin-
                > bottom: 20px; } #ygrp-sponsor #ov ul{ padding: 0 0 0 8px; margin:
                > 0; } #ygrp-sponsor #ov li{ list-style-type: square; padding: 6px 0;
                > font-size: 77%; } #ygrp-sponsor #ov li a{ text-decoration: none;
                > font-size: 130%; } #ygrp-sponsor #nc{ background-color: #eee; margin-
                > bottom: 20px; padding: 0 8px; } #ygrp-sponsor .ad{ padding: 8px 0; }
                > #ygrp-sponsor .ad #hd1{ font-family: Arial; font-weight: bold;
                > color: #628c2a; font-size: 100%; line-height: 122%; } #ygrp-
                > sponsor .ad a{ text-decoration: none; } #ygrp-sponsor .ad
                > a:hover{ text-decoration: underline; } #ygrp-sponsor .ad p{ margin:
                > 0; } o{font-size: 0; } .MsoNormal{ margin: 0 0 0 0; } #ygrp-text
                > tt{ font-size: 120%; } blockquote{margin: 0 0 0 4px;} .replbq{margin:
                > 4} -->
              Your message has been successfully submitted and would be delivered to recipients shortly.