| Newsgroups |
gmane.comp.web.services.rest |
| Message-ID |
<[email protected]> |
--19WVBWeXyqwLb0R02izjMaoLKjzSsLcCLuq-klJ
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
hello philippe.
On 2014-05-19, 6:49 , Philippe Marsteau [email protected]
[rest-discuss] wrote:
> This being said you certainly can model a pub/sub polling scenario
> within REST constraints. The pushing scenario however do require state
> on the server that belongs to client. Because the client determines
> lifecycle of these "push config" dynamic resources, eg when to delete
> it, that data need to be kept in sync between machines, and handling*
> that extra state breaks statelessness of REST (*handling like in
> auto-expiring subscriptions over time, etc.)
i am not sure how you get to this conclusion. a client subscription to a
service is a resource, and yes, when a service has to manage millions of
client subscriptions, that is not trivial. but it can be implemented, at
a certain cost, and when you're willing to do that, then you have those
subscriptions available to the service, which can then use them to send
push notifications. that is now services such as APN or C2DM work. it's
RESTful, if you model it in a way that a client POSTs a subscription and
can DELETE it when it cancels.
> The other technical pb of pub/sub over HTTP are firewalls or related
> network issues. It is not uncommon that clients have firewalls in place
> that let outgoing calls but require IP whitelisting to let calls come
> in. That further reduces scalability of such model (basically each
> client must be seen as a server and vice-versa). The clients costs is
> typically higher than server (clients establish the HTTP connection and
> close them as appropriate for their use cases). This cost is acceptable
> because you usually have many clients for one server. If the server had
> to pay that connection cost (eg to push data), it would be central and
> all clients would deal with a less responsive server as a result.
yes, for back-end m2m scenarios, URI-based push works. but for pushing
to mobile devices, it doesn't, because they are not part of the open
internet (i.e., they don't have a stable public IP address).
> Finally, pub/sub model implies a level of trusts normal HTTP app servers
> do not need to have. Blindly connecting to any HTTP endpoint opens to
> security vulnerabilities. The client (subscriber) will typically expect
> some shared secret or key cert exchange, and the server may not be
> willing to blindly post data to unknown locations.
yes, pubsub probably requires some level of trust, and may just be the
"premium" way of getting information from a service. for massive scale
information distribution, pubsub probably really is not a good model,
but for some other scenarios, that may be different.
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 |
--19WVBWeXyqwLb0R02izjMaoLKjzSsLcCLuq-klJ
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>hello philippe.<br>
<br>
On 2014-05-19, 6:49 , Philippe Marsteau [email protected] <br>
[rest-discuss] wrote:<br>
> This being said you certainly can model a pub/sub polling scenario<br>
> within REST constraints. The pushing scenario however do require state<br>
> on the server that belongs to client. Because the client determines<br>
> lifecycle of these "push config" dynamic resources, eg when to delete<br>
> it, that data need to be kept in sync between machines, and handling*<br>
> that extra state breaks statelessness of REST (*handling like in<br>
> auto-expiring subscriptions over time, etc.)<br>
<br>
i am not sure how you get to this conclusion. a client subscription to a <br>
service is a resource, and yes, when a service has to manage millions of <br>
client subscriptions, that is not trivial. but it can be implemented, at <br>
a certain cost, and when you're willing to do that, then you have those <br>
subscriptions available to the service, which can then use them to send <br>
push notifications. that is now services such as APN or C2DM work. it's <br>
RESTful, if you model it in a way that a client POSTs a subscription and <br>
can DELETE it when it cancels.<br>
<br>
> The other technical pb of pub/sub over HTTP are firewalls or related<br>
> network issues. It is not uncommon that clients have firewalls in place<br>
> that let outgoing calls but require IP whitelisting to let calls come<br>
> in. That further reduces scalability of such model (basically each<br>
> client must be seen as a server and vice-versa). The clients costs is<br>
> typically higher than server (clients establish the HTTP connection and<br>
> close them as appropriate for their use cases). This cost is acceptable<br>
> because you usually have many clients for one server. If the server had<br>
> to pay that connection cost (eg to push data), it would be central and<br>
> all clients would deal with a less responsive server as a result.<br>
<br>
yes, for back-end m2m scenarios, URI-based push works. but for pushing <br>
to mobile devices, it doesn't, because they are not part of the open <br>
internet (i.e., they don't have a stable public IP address).<br>
<br>
> Finally, pub/sub model implies a level of trusts normal HTTP app servers<br>
> do not need to have. Blindly connecting to any HTTP endpoint opens to<br>
> security vulnerabilities. The client (subscriber) will typically expect<br>
> some shared secret or key cert exchange, and the server may not be<br>
> willing to blindly post data to unknown locations.<br>
<br>
yes, pubsub probably requires some level of trust, and may just be the <br>
"premium" way of getting information from a service. for massive scale <br>
information distribution, pubsub probably really is not a good model, <br>
but for some other scenarios, that may be different.<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>
</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: Erik Wilde <[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/19654;_ylc=X3oDMTJxZjk2NDI1BF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NjU0BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQwMDYyNTY0Nw--?act=reply&messageNum=19654">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%20Reactive%20REST" 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%20Reactive%20REST" 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=X3oDMTJlZWpzYjJoBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQwMDYyNTY0Nw--" 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/19643;_ylc=X3oDMTM2YmUwbzN0BF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NjU0BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWUDMTQwMDYyNTY0NwR0cGNJZAMxOTY0Mw--" style="text-decoration: none; color: #2D50FD;">Messages in this topic</a>
(12)
</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=X3oDMTJlYmpuNzFxBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQwMDYyNTY0Nw--" style="text-decoration: none;">Visit Your Group</a></span>
<ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
</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=X3oDMTJkdWQ4cjdkBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDAwNjI1NjQ3" 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=19654/stime=1400625647" 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 -->
--19WVBWeXyqwLb0R02izjMaoLKjzSsLcCLuq-klJ--