Re: Resources and presentation views

Erik Wilde <[email protected]> Wed, 07 May 2014 16:07:16 -0700
Newsgroups gmane.comp.web.services.rest
Message-ID <[email protected]>
--x8tZXukiTAFHVJSahTZiNaqYAnPej6PfGGCmAvS
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

hello m.

On 2014-05-07, 10:22 , [email protected] wrote:
> 1.How does REST treat the notion of alternate presentation views for
> resource instances?
> For example suppose you want to model various views of a “Report” such
> as “Pie Chart” / “Histogram” .. that all share a common media type
> (text/html). How would such scenario be implemented using HTTP in
> RESTful way?

have a report resource that contains types links to the various views, 
which are resources themselves. this allows clients to link to those 
views, or to link to the more abstract general report. also, if 
possible, include backlinks from the views, so that a client accessing a 
view can find the general report resource.

> 2.Are resources required to expose a public URL or can they be thought
> of conceptually part of other resources Value Set without any URL?
> For example suppose that all Report views are modeled as dependent
> resource that are implicitly created when the client POSTS a Report to a
> Reports Collection, is there any requirement to maintain a URL for the
> Report resource instance itself such as /Reports/1 (assuming all access
> is limited through views) What would be a proper response to such HTTP
> POST ?
> /Reports/1/PieChart
> /Reports/1/Histogram

you could make /Reports a "POST-only" resource, but i'd suggest to keep 
/Reports/1 around because

- it's a convenient starting place to find all view links
- it allows you to DELETE an entire report
- it may also link to or contain additional info such as a history or 
whatever else may be interesting about a report apart from the views

> 3.According to the URL RFC 3986 different query strings produce
> different resource identifiers, is there any advantage to model
> alternate view resources using path components over query parameters or
> vice versa, (seems like same thing) ?

it's similar and to some extent, query strings are a historical aspect 
of URI syntax. usually, people use paths when resource structure and 
navigation is clearly hierarchical (and then being able to "hack" URIs 
in the address bar can be very convenient), and query strings are used 
when things get more complicated, such as multiple dimensions of how 
resources are related. that being said, keep in mind that good REST 
designs should not depend on specific URI patterns anyway, you should 
have a logical view of how you interlink resources. using "pretty URIs" 
then makes your service nicer to use, but your design should work in the 
very same way, regardless of whether you use /Reports/1/pie or 
/Reports/1?view=pie

cheers,

d.

-- 
erik wilde | mailto:[email protected]  -  tel:+1-510-2061079 |
            | UC Berkeley  -  School of Information (ISchool) |
            | http://dret.net/netdret http://twitter.com/dret |

--x8tZXukiTAFHVJSahTZiNaqYAnPej6PfGGCmAvS
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm=
l4/strict.dtd">
<html>
<head>
</head>






=20
<body style=3D"background-color: #fff;">
<span style=3D"display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id=3D"ygrp-mlmsg" style=3D"position:relative;">
  <div id=3D"ygrp-msg" style=3D"z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id=3D"ygrp-text" >
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p>hello m.<br>
<br>
On 2014-05-07, 10:22 , [email protected] wrote:<br>
&gt; 1.How does REST treat the notion of alternate presentation views for<b=
r>
&gt; resource instances?<br>
&gt; For example suppose you want to model various views of a =E2=80=9CRepo=
rt=E2=80=9D such<br>
&gt; as =E2=80=9CPie Chart=E2=80=9D / =E2=80=9CHistogram=E2=80=9D .. that a=
ll share a common media type<br>
&gt; (text/html). How would such scenario be implemented using HTTP in<br>
&gt; RESTful way?<br>
<br>
have a report resource that contains types links to the various views, <br>
which are resources themselves. this allows clients to link to those <br>
views, or to link to the more abstract general report. also, if <br>
possible, include backlinks from the views, so that a client accessing a <b=
r>
view can find the general report resource.<br>
<br>
&gt; 2.Are resources required to expose a public URL or can they be thought=
<br>
&gt; of conceptually part of other resources Value Set without any URL?<br>
&gt; For example suppose that all Report views are modeled as dependent<br>
&gt; resource that are implicitly created when the client POSTS a Report to=
 a<br>
&gt; Reports Collection, is there any requirement to maintain a URL for the=
<br>
&gt; Report resource instance itself such as /Reports/1 (assuming all acces=
s<br>
&gt; is limited through views) What would be a proper response to such HTTP=
<br>
&gt; POST ?<br>
&gt; /Reports/1/PieChart<br>
&gt; /Reports/1/Histogram<br>
<br>
you could make /Reports a &quot;POST-only&quot; resource, but i&#39;d sugge=
st to keep <br>
/Reports/1 around because<br>
<br>
- it&#39;s a convenient starting place to find all view links<br>
- it allows you to DELETE an entire report<br>
- it may also link to or contain additional info such as a history or <br>
whatever else may be interesting about a report apart from the views<br>
<br>
&gt; 3.According to the URL RFC 3986 different query strings produce<br>
&gt; different resource identifiers, is there any advantage to model<br>
&gt; alternate view resources using path components over query parameters o=
r<br>
&gt; vice versa, (seems like same thing) ?<br>
<br>
it&#39;s similar and to some extent, query strings are a historical aspect =
<br>
of URI syntax. usually, people use paths when resource structure and <br>
navigation is clearly hierarchical (and then being able to &quot;hack&quot;=
 URIs <br>
in the address bar can be very convenient), and query strings are used <br>
when things get more complicated, such as multiple dimensions of how <br>
resources are related. that being said, keep in mind that good REST <br>
designs should not depend on specific URI patterns anyway, you should <br>
have a logical view of how you interlink resources. using &quot;pretty URIs=
&quot; <br>
then makes your service nicer to use, but your design should work in the <b=
r>
very same way, regardless of whether you use /Reports/1/pie or <br>
/Reports/1?view=3Dpie<br>
<br>
cheers,<br>
<br>
d.<br>
<br>
-- <br>
erik wilde | mailto:[email protected]  -  tel:&#43;1-510-2061079 |<br>
            | UC Berkeley  -  School of Information (ISchool) |<br>
            | http://dret.net/netdret http://twitter.com/dret |<br>
</p>

    </div>
=20=20=20=20=20

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style=3D"color: #fff; height: 0;">__._,_.___</div>

=20=20=20=20=20=20=20=20=20=20
=20=20
=20

=20=20=20=20
    <div style=3D"clear:both"> </div>

    <table cellspacing=3D4px style=3D"margin-top: 20px; margin-bottom: 10px=
; color: #2D50FD;">
      <tbody>
        <tr>
          <td style=3D"font-size: 12px; font-family: arial; font-weight: bo=
ld; padding: 7px 5px 5px;"  >
                          <a style=3D"text-decoration: none; color: #2D50FD=
" href=3D"https://groups.yahoo.com/neo/groups/rest-discuss/conversations/me=
ssages/19637;_ylc=3DX3oDMTJxaDMybmp1BF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3J=
wc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NjM3BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTM5OT=
UwNDA0OQ--?act=3Dreply&messageNum=3D19637">Reply via web post</a>
                      </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5Brest-d=
iscuss%5D%20Resources%20and%20presentation%20views" style=3D"text-decoratio=
n: none; color: #2D50FD;">
               Reply to sender            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;">
            <a href=3D"mailto:[email protected]?subject=3DRe%3A%=
20%5Brest-discuss%5D%20Resources%20and%20presentation%20views" style=3D"tex=
t-decoration: none; color: #2D50FD">
              Reply to group            </a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;" >
            <a href=3D"https://groups.yahoo.com/neo/groups/rest-discuss/con=
versations/newtopic;_ylc=3DX3oDMTJlMm5yZzc4BF9TAzk3MzU5NzE0BGdycElkAzQzMTky=
NTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTM5OTUwNDA0OQ-=
-" style=3D"text-decoration: none; color: #2D50FD">Start a New Topic</a>
          </td>
          <td>&bull;</td>
          <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p=
x 5px;color: #2D50FD;" >
                            <a href=3D"https://groups.yahoo.com/neo/groups/=
rest-discuss/conversations/topics/19636;_ylc=3DX3oDMTM2aTJobWdjBF9TAzk3MzU5=
NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NjM3BHNlYwNmdHI=
Ec2xrA3Z0cGMEc3RpbWUDMTM5OTUwNDA0OQR0cGNJZAMxOTYzNg--" style=3D"text-decora=
tion: none; color: #2D50FD;">Messages in this topic</a>
                (2)
                      </td>
        </tr>
      </tbody>
    </table>

=20=20=20=20=20=20=20=20
<div id=3D"megaphoneModule">
=20=20=20=20=20
    <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background-col=
or:#E3E3E3;">
</div>

<!------- Start Nav Bar ------>




=20

<!-- |**|begin egp html banner|**| -->
<div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver=
dana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

    <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf=
orm: uppercase; "><a href=3D"https://groups.yahoo.com/neo/groups/rest-discu=
ss/info;_ylc=3DX3oDMTJlcHE3M2cxBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJ=
ZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTM5OTUwNDA0OQ--" style=3D"=
text-decoration: none;">Visit Your Group</a></span>

     <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in=
line;">
            <li style=3D"border-right: 1px solid #000; font-weight: 700; di=
splay: inline; padding: 0 5px; margin-left: 0;">
      <span class=3D"cat"><a href=3D"https://groups.yahoo.com/neo/groups/re=
st-discuss/members/all;_ylc=3DX3oDMTJmaG1pOHBzBF9TAzk3MzU5NzE0BGdycElkAzQzM=
TkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEzOTk1MDQw=
NDk-" style=3D"text-decoration: none;">New Members</a></span>
      <span class=3D"ct" style=3D"color: #ff7900;">2</span>
    </li>
                                              </ul>
  </div>


<div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p=
x; padding: 0 2px 0 0; clear: both;">
  <a href=3D"https://groups.yahoo.com/neo;_ylc=3DX3oDMTJkbTQ2dDNmBF9TAzk3Mz=
U5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxMzk5NTA0MDQ5" style=3D"float: left;"><img src=3D"http://l.yimg.com/r=
u/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15"=
 width=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a>
  <div style=3D"color: #747575; float: right;"> &bull; <a href=3D"https://i=
nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio=
n: none;">Privacy</a> &bull; <a href=3D"mailto:rest-discuss-unsubscribe@yah=
oogroups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsubs=
cribe</a> &bull; <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/term=
s/" style=3D"text-decoration: none;">Terms of Use</a> </div>
</div>
<br>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

=20
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m=
argin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id=3D"ygrp-reco">
     </div>
<!-- End Recommendations -->



  </div>   <!-- |**|end egp html banner|**| -->

  <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D4319255/grpspI=
d=3D1705701014/msgId=3D19637/stime=3D1399504049" width=3D"1" height=3D"1"> =
<br>

<img src=3D"http://y.analytics.yahoo.com/fpc.pl?ywarid=3D515FB27823A7407E&a=
=3D10001310322279&js=3Dno&resp=3Dimg" width=3D"1" height=3D"1">=20

<div style=3D"color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
  <style type=3D"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;
  }
=20=20
  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.fi=
le-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;
  }=20

  #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;=20
  }=20
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


--x8tZXukiTAFHVJSahTZiNaqYAnPej6PfGGCmAvS--