| Newsgroups |
gmane.comp.web.services.rest |
| Message-ID |
<CAAgVzdh3F5g8CNvVxYRY3WqQKd=xbfNr6S6zM2NdnULObWqp2Q@mail.gmail.com> |
--NdTZorUDGVSQpDD99uWnILlj0vzbx6hm7M1mRAB
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi Robby,
If there are only two states, I would name the resource /binary, and
each time it receive a POST with a 1 bit in the body and responds with
a current tail bit. Internally, it just adds the 1 bit to the atomic
binary. I think it is RESTful.
Cheers,
Dong
On Wed, Jul 9, 2014 at 11:14 AM, Simpson, Robby (GE Energy Management)
<[email protected]> wrote:
> Hi Dong,
>
> Yes, in my application I'm actually more interested in a "blind" toggle l=
ike the pull handle of a slot machine. (Perhaps that would be a better exa=
mple going forward)
>
> Regarding the POST, I'm still a bit confused as to how this would be cons=
tructed. In my applications, I've tended to use the POST method on "collec=
tion" resources to create a new resource that is a member of the collection=
. It seems to me if one had a resource /pullHandle and simply used POST wi=
th an empty body, that we are really heading down the RPC route rather than=
being RESTful. This also overloads the semantics of POST ("POST as create=
a member" and "POST as ?activate?"). Am I just overthinking here?
>
> Thanks,
> Robby
>
> From: "Dong Liu [email protected]<mailto:[email protected]> [rest-discu=
ss]" <[email protected]<mailto:rest-discuss-noreply@yaho=
ogroups.com>>
> Reply-To: Dong Liu <[email protected]<mailto:[email protected]>>
> Date: Wednesday, July 9, 2014 at 10:59 AM
> To: Erik Wilde <[email protected]<mailto:[email protected]>>
> Cc: Rest List <[email protected]<mailto:rest-discuss@yahoogrou=
ps.com>>
> Subject: Re: [rest-discuss] RESTful Toggle
>
>
>
> Hi Erik,
>
> I think when a use toggles, s/he must do that based on what s/he sees
> or in fact saw. If it is a "blind" toggle then it is like the pull
> handle of a slot machine. And I agree with you and Mike for a POST in
> that case.
>
> Cheers,
>
> Dong
>
> On Wed, Jul 9, 2014 at 10:52 AM, Erik Wilde <[email protected]<mailto:dre=
[email protected]>> wrote:
>> hello dong.
>>
>>
>> On 2014-07-09, 16:46 , Dong Liu wrote:
>>>
>>> I assume it is like a push button with no up/down or in/out lock.
>>
>>
>> exactly. and as such, the button itself does not have a state. you can
>> activate it, and it will toggle stuff. it probably would make a lot of s=
ense
>> to make that activation non-idempotent, and i think mike has pointed tha=
t
>> out already.
>>
>>
>>> Anytime you push it and release, the state switches to the opposite of
>>> what you see. Robby was concerned about " both the overhead
>>> and latency this entails as well as the potential for a race condition
>>> (what if /state changes between the GET and the PUT?)"
>>
>>
>> i don't think PUT is a good model for a toggle service, as there's no st=
ate
>> to PUT. toggle inherently has race conditions, and if you don't like the=
m,
>> then maybe toggle is not a service you should provide. just provide the
>> usual GET/PUT on the resource itself, and get rid of the toggle resource=
.
>>
>>
>> cheers,
>>
>> dret.
>>
>> --
>> erik wilde | mailto:[email protected] - tel:+1-510-2061079 |
>> | UC Berkeley - School of Information (ISchool) |
>> | http://dret.net/netdret http://twitter.com/dret |
>
>=20
--NdTZorUDGVSQpDD99uWnILlj0vzbx6hm7M1mRAB
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>
<body style="background-color: #fff;">
<span style="display:none"> </span>
<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="position:relative;">
<div id="ygrp-msg" style="z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->
<div id="ygrp-text" >
<p>Hi Robby,<br>
<br>
If there are only two states, I would name the resource /binary, and<br>
each time it receive a POST with a 1 bit in the body and responds with<br>
a current tail bit. Internally, it just adds the 1 bit to the atomic<br>
binary. I think it is RESTful.<br>
<br>
Cheers,<br>
<br>
Dong<br>
<br>
On Wed, Jul 9, 2014 at 11:14 AM, Simpson, Robby (GE Energy Management)<br>
<[email protected]> wrote:<br>
> Hi Dong,<br>
><br>
> Yes, in my application I'm actually more interested in a "blind" toggle like the pull handle of a slot machine. (Perhaps that would be a better example going forward)<br>
><br>
> Regarding the POST, I'm still a bit confused as to how this would be constructed. In my applications, I've tended to use the POST method on "collection" resources to create a new resource that is a member of the collection. It seems to me if one had a resource /pullHandle and simply used POST with an empty body, that we are really heading down the RPC route rather than being RESTful. This also overloads the semantics of POST ("POST as create a member" and "POST as ?activate?"). Am I just overthinking here?<br>
><br>
> Thanks,<br>
> Robby<br>
><br>
> From: "Dong Liu [email protected]<mailto:[email protected]> [rest-discuss]" <[email protected]<mailto:[email protected]>><br>
> Reply-To: Dong Liu <[email protected]<mailto:[email protected]>><br>
> Date: Wednesday, July 9, 2014 at 10:59 AM<br>
> To: Erik Wilde <[email protected]<mailto:[email protected]>><br>
> Cc: Rest List <[email protected]<mailto:[email protected]>><br>
> Subject: Re: [rest-discuss] RESTful Toggle<br>
><br>
><br>
><br>
> Hi Erik,<br>
><br>
> I think when a use toggles, s/he must do that based on what s/he sees<br>
> or in fact saw. If it is a "blind" toggle then it is like the pull<br>
> handle of a slot machine. And I agree with you and Mike for a POST in<br>
> that case.<br>
><br>
> Cheers,<br>
><br>
> Dong<br>
><br>
> On Wed, Jul 9, 2014 at 10:52 AM, Erik Wilde <[email protected]<mailto:[email protected]>> wrote:<br>
>> hello dong.<br>
>><br>
>><br>
>> On 2014-07-09, 16:46 , Dong Liu wrote:<br>
>>><br>
>>> I assume it is like a push button with no up/down or in/out lock.<br>
>><br>
>><br>
>> exactly. and as such, the button itself does not have a state. you can<br>
>> activate it, and it will toggle stuff. it probably would make a lot of sense<br>
>> to make that activation non-idempotent, and i think mike has pointed that<br>
>> out already.<br>
>><br>
>><br>
>>> Anytime you push it and release, the state switches to the opposite of<br>
>>> what you see. Robby was concerned about " both the overhead<br>
>>> and latency this entails as well as the potential for a race condition<br>
>>> (what if /state changes between the GET and the PUT?)"<br>
>><br>
>><br>
>> i don't think PUT is a good model for a toggle service, as there's no state<br>
>> to PUT. toggle inherently has race conditions, and if you don't like them,<br>
>> then maybe toggle is not a service you should provide. just provide the<br>
>> usual GET/PUT on the resource itself, and get rid of the toggle resource.<br>
>><br>
>><br>
>> cheers,<br>
>><br>
>> dret.<br>
>><br>
>> --<br>
>> erik wilde | mailto:[email protected] - tel:+1-510-2061079 |<br>
>> | UC Berkeley - School of Information (ISchool) |<br>
>> | http://dret.net/netdret http://twitter.com/dret |<br>
><br>
> <br>
</p>
</div>
<!--~-|**|PrettyHtmlStart|**|-~-->
<div style="color: #fff; height: 0;">__._,_.___</div>
<div style="clear:both"> </div>
<div id="fromDMARC" style="margin-top: 10px;">
<hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
Posted by: Dong Liu <[email protected]> <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
</div>
<div style="clear:both"> </div>
<table cellspacing=4px style="margin-top: 10px; margin-bottom: 10px; color: #2D50FD;">
<tbody>
<tr>
<td style="font-size: 12px; font-family: arial; font-weight: bold; padding: 7px 5px 5px;" >
<a style="text-decoration: none; color: #2D50FD" href="https://groups.yahoo.com/neo/groups/rest-discuss/conversations/messages/19670;_ylc=X3oDMTJxY3ZkN2ZhBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NjcwBHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQwNDkxOTU4NA--?act=reply&messageNum=19670">Reply via web post</a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
<a href="mailto:[email protected]?subject=Re%3A%20%5Brest-discuss%5D%20RESTful%20Toggle" style="text-decoration: none; color: #2D50FD;">
Reply to sender </a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;">
<a href="mailto:[email protected]?subject=Re%3A%20%5Brest-discuss%5D%20RESTful%20Toggle" style="text-decoration: none; color: #2D50FD">
Reply to group </a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;" >
<a href="https://groups.yahoo.com/neo/groups/rest-discuss/conversations/newtopic;_ylc=X3oDMTJlYmRsMmdsBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQwNDkxOTU4NA--" style="text-decoration: none; color: #2D50FD">Start a New Topic</a>
</td>
<td>•</td>
<td style="font-size: 12px; font-family: arial; padding: 7px 5px 5px;color: #2D50FD;" >
<a href="https://groups.yahoo.com/neo/groups/rest-discuss/conversations/topics/19657;_ylc=X3oDMTM2cTgxOGliBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NjcwBHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQwNDkxOTU4NAR0cGNJZAMxOTY1Nw--" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
(14)
</td>
</tr>
</tbody>
</table>
<!------- Start Nav Bar ------>
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">
<span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; "><a href="https://groups.yahoo.com/neo/groups/rest-discuss/info;_ylc=X3oDMTJldmpkcGdlBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQwNDkxOTU4NA--" style="text-decoration: none;">Visit Your Group</a></span>
<ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
<li style="border-right: 1px solid #000; font-weight: 700; display: inline; padding: 0 5px; margin-left: 0;">
<span class="cat"><a href="https://groups.yahoo.com/neo/groups/rest-discuss/members/all;_ylc=X3oDMTJmbnZka2FvBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0MDQ5MTk1ODQ-" style="text-decoration: none;">New Members</a></span>
<span class="ct" style="color: #ff7900;">2</span>
</li>
</ul>
</div>
<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
<a href="https://groups.yahoo.com/neo;_ylc=X3oDMTJkdW1sNHM3BF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDA0OTE5NTg0" style="float: left;"><img src="http://l.yimg.com/ru/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
<div style="color: #747575; float: right;"> • <a href="https://info.yahoo.com/privacy/us/yahoo/groups/details.html" style="text-decoration: none;">Privacy</a> • <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> • <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/" style="text-decoration: none;">Terms of Use</a> </div>
</div>
<br>
<!-- |**|end egp html banner|**| -->
</div> <!-- ygrp-msg -->
<!-- Sponsor -->
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-sponsor" style="width:160px; float:right; clear:none; margin:0 0 25px 0; background: #fff;">
<!-- Start Recommendations -->
<div id="ygrp-reco">
</div>
<!-- End Recommendations -->
</div> <!-- |**|end egp html banner|**| -->
<div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>
<img src="http://geo.yahoo.com/serv?s=97359714/grpId=4319255/grpspId=1705701014/msgId=19670/stime=1404919584" width="1" height="1"> <br>
<img src="http://y.analytics.yahoo.com/fpc.pl?ywarid=515FB27823A7407E&a=10001310322279&js=no&resp=img" width="1" height="1">
<div style="color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
<style type="text/css">
<!--
#ygrp-mkp {
border: 1px solid #d8d8d8;
font-family: Arial;
margin: 10px 0;
padding: 0 10px;
}
#ygrp-mkp hr {
border: 1px solid #d8d8d8;
}
#ygrp-mkp #hd {
color: #628c2a;
font-size: 85%;
font-weight: 700;
line-height: 122%;
margin: 10px 0;
}
#ygrp-mkp #ads {
margin-bottom: 10px;
}
#ygrp-mkp .ad {
padding: 0 0;
}
#ygrp-mkp .ad p {
margin: 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: 700;
font-size: 78%;
line-height: 122%;
}
#ygrp-sponsor #ygrp-lc .ad {
margin-bottom: 10px;
padding: 0 0;
}
#actions {
font-family: Verdana;
font-size: 11px;
padding: 10px 0;
}
#activity {
background-color: #e0ecee;
float: left;
font-family: Verdana;
font-size: 10px;
padding: 10px;
}
#activity span {
font-weight: 700;
}
#activity span:first-child {
text-transform: uppercase;
}
#activity span a {
color: #5085b6;
text-decoration: none;
}
#activity span span {
color: #ff7900;
}
#activity span .underline {
text-decoration: underline;
}
.attach {
clear: both;
display: table;
font-family: Arial;
font-size: 12px;
padding: 10px 0;
width: 400px;
}
.attach div a {
text-decoration: none;
}
.attach img {
border: none;
padding-right: 5px;
}
.attach label {
display: block;
margin-bottom: 5px;
}
.attach label a {
text-decoration: none;
}
blockquote {
margin: 0 0 0 4px;
}
.bold {
font-family: Arial;
font-size: 13px;
font-weight: 700;
}
.bold a {
text-decoration: none;
}
dd.last p a {
font-family: Verdana;
font-weight: 700;
}
dd.last p span {
margin-right: 10px;
font-family: Verdana;
font-weight: 700;
}
dd.last p span.yshortcuts {
margin-right: 0;
}
div.attach-table div div a {
text-decoration: none;
}
div.attach-table {
width: 400px;
}
div.file-title a, div.file-title a:active, div.file-title a:hover, div.file-title a:visited {
text-decoration: none;
}
div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div.photo-title a:visited {
text-decoration: none;
}
div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
font-family: Verdana;
font-size: 10px;
font-weight: normal;
}
.green {
color: #628c2a;
}
.MsoNormal {
margin: 0 0 0 0;
}
o {
font-size: 0;
}
#photos div {
float: left;
width: 72px;
}
#photos div div {
border: 1px solid #666666;
height: 62px;
overflow: hidden;
width: 62px;
}
#photos div label {
color: #666666;
font-size: 10px;
overflow: hidden;
text-align: center;
white-space: nowrap;
width: 64px;
}
#reco-category {
font-size: 77%;
}
#reco-desc {
font-size: 77%;
}
.replbq {
margin: 4px;
}
#ygrp-actbar div a:first-child {
/* border-right: 0px solid #000;*/
margin-right: 2px;
padding-right: 5px;
}
#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-mlmsg #logo {
padding-bottom: 10px;
}
#ygrp-msg p a {
font-family: Verdana;
}
#ygrp-msg p#attach-count span {
color: #1E66AE;
font-weight: 700;
}
#ygrp-reco #reco-head {
color: #ff7900;
font-weight: 700;
}
#ygrp-reco {
margin-bottom: 20px;
padding: 0px;
}
#ygrp-sponsor #ov li a {
font-size: 130%;
text-decoration: none;
}
#ygrp-sponsor #ov li {
font-size: 77%;
list-style-type: square;
padding: 6px 0;
}
#ygrp-sponsor #ov ul {
margin: 0;
padding: 0 0 0 8px;
}
#ygrp-text {
font-family: Georgia;
}
#ygrp-text p {
margin: 0 0 1em 0;
}
#ygrp-text tt {
font-size: 120%;
}
#ygrp-vital ul li:last-child {
border-right: none !important;
}
-->
</style>
</head>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->
--NdTZorUDGVSQpDD99uWnILlj0vzbx6hm7M1mRAB--