Fw: URI construction for REST API and use of verbs as resource?

"Kalana Guniyangoda [email protected] [rest-discuss]" <[email protected]> Wed, 24 Jun 2015 14:38:43 +0000 (UTC)
Newsgroups gmane.comp.web.services.rest
Message-ID <[email protected]>
------=_Part_364952_663866500.1435156723971
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="UTF-8"

 


  


On Wed, Jun 24, 2015 at 2:09 PM, Kalana Guniyangoda <[email protected]=
om> wrote:


Hi J=C3=B8rn, Thank you very much for the response. It looks li=
ke I have thought given more attention to HTTP request methods than represe=
nting things as resources. For example I have tried to do lots of things us=
ing a PUT or PATCH while I should have identified each as individual resour=
ce instead. 


I should definitely think of using a hyper media format which=
 would ease my work on constructing my responses. 


Thank a lot for the cle=
ar examples and response J=C3=B8rn. I realized that we are doing this discu=
ssion off the list. Shall I send a copy to the list since, I believe your e=
xamples and suggestions would help lot of other guys too.
Thank you very mu=
ch.




     On Wednesday, June 24, 2015 2:00 PM, J=C3=B8rn Wildt <jw@fjeldgr=
uppen.dk> wrote:
   


 > 1) What kind of HTTP request method you are using =
for /requsitions/{id}/accept, /requsitions/{id}/cancel


That would be POST =
for executing the actual operation. A GET returns a human readable descript=
ion of the resource (could also include an HTML form to allow developers to=
 try it out directly).


> Would be restful if we put "accepted", "canceled"=
, "assessed" and "completed" as flags on requisition resource and then used=
 PUT or PATCH method to update that flag.


You could also do that and PATCH=
 those boolean flags. But then it would be weird to include other values to=
o (like for instance a time stamp, a reason and similar stuff that is someh=
ow related to the operation). PUT is difficult as it was never designed for=
 partial updates (but this is debated among the experts ...) - but it would=
 work too. None of it can be said to be "RESTful" or not - REST is an archi=
tectural style whereas the inner workings of PUT/POST/PATCH is more related=
 to the HTTP specification.


> if we use parameters such as "?search=3D" or=
 "?filter=3D", the client can't discover it right? 


Well, it depends ... r=
emember to distinguish between the "client" and what/who is driving the cli=
ent. The client can discover, at runtime, how to construct the URL given th=
at it knows it will contain a parameter named "search". This can be done wi=
th URL templates. But a human driving the client would have to understand t=
he search expression format. If a scripted program was driving the client t=
hen that program/script would have to understand the format too. But the cl=
ient itself - the code that understand the message format - can discover ho=
w to construct a URL with the "search" parameter in it.


URL templates are =
supported in some of the hypermedia formats out there (look for HAL, Mason,=
 Siren, Collections-JSON for more info). Mason for instance uses @controls =
to represent embedded hypermedia controls. A "search" URL template could be=
 represented like this:


{
=C2=A0 Description: "This is a collection of ite=
ms",
=C2=A0 @controls:
=C2=A0 {
=C2=A0=C2=A0=C2=A0 search:
=C2=A0=C2=A0=C2=
=A0 {
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 href: "http://myapi.com/items-search{?=
search}",
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 isHrefTemplate: true,
=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0 method: "GET",
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 title: "Th=
is is a URL template for searching for other items in the collection"
=C2=
=A0=C2=A0=C2=A0 }
=C2=A0 }
}




On Tue, Jun 23, 2015 at 6:06 PM, Kalana Guni=
yangoda <[email protected]> wrote:


Hi J=C3=B8rn,
Thank you very much for t=
he explanations and examples. I also read your blog-post on url structure a=
nd it was very informative. If you don't mind I have few more questions. 


=
1) What kind of HTTP request method you are using for  /requsitions/{id}/ac=
cept, /requsitions/{id}/cancel


2) Would be restful if we put "accepted", "=
canceled", "assessed" and "completed" as flags on requisition resource and =
then used PUT or PATCH method to update that flag. After reading the blog, =
I started to think more on client coupling to the API just because of the u=
se of API specific URL's or parameters. Even in this case, if we use flags,=
 the client has to know it before. Or is it possible to let them know it vi=
a hypertext in the resource itself? if yes, what kind of a formatting you s=
uggest?
3) I'm kinda stuck with search and filtering operations for a colle=
ction. Paging of course could be done for a collection using GET parameters=
 and then URL's for next and previous pages could be included in the resour=
ce itself. However for search and filtering, if we use parameters such as "=
?search=3D" or "?filter=3D", the client can't discover it right? And that w=
ould leads to tight coupling between server and client. 
Is it possible to =
include those parameters in the resource itself? if yet, what would be the =
best way? what type of link relations you may use?
Again.. Thanks for your =
advices and suggestions..






     On Monday, June 22, 2015 12:47 PM, J=C3=
=B8rn Wildt <[email protected]> wrote:
   


 > For the second question, "c=
ontroller as a resource" seems to be a good option. But still I feel like i=
t is a scapegoat version for including verbs in the URL. Maybe I need to re=
ad more on that.My experience is that you can get a long way by restricting=
 yourself to nouns only - and invent new nouns instead of adding verbs. But=
 sometimes it gets a bit tricky: in my current work we are representing "re=
quisitions" via an API (a requisition is a request for some work to be done=
). Such a requisition can be manipulated in many different ways - it can be=
 "accepted" by the receiver, it can be "canceled" by the sender, it can be =
"assessed" by the receiver, "updated" by the sender and eventually "complet=
ed" by the receiver.We ended up using "controller" resources for each of th=
ese operations - and together with embedded hypermedia links in the requisi=
tion representation it works very well.The requisition itself is at /requsi=
tions/{id} and each of the operations are at /requsitions/{id}/accept, /req=
usitions/{id}/cancel and so on. Not that the actual URLs matter at all to t=
he client since we include them in the requisition representation itself. S=
omething like this:{
=C2=A0 Id: 1234,
=C2=A0 Description: "Blah ...",
=C2=
=A0 Deadline: "2015-06-25 12:00:00",
=C2=A0 Links:
=C2=A0 {
=C2=A0=C2=A0=C2=
=A0 accept: "... full path to accept controller",
=C2=A0=C2=A0=C2=A0 cancel=
: "... full path to cancel controller",
=C2=A0 }
}/J=C3=B8rn
 =C2=A0   Than=
k you very much for the responses Aristotle, Erik, Vinod and Jeff


=C2=A0I =
think the answer for first question is clear that it is better to use URL's=
 which give us a meaningful URL even thought it is long.


=C2=A0For the sec=
ond question, "controller as a resource" seems to be a good option. But sti=
ll I feel like it is a scapegoat version for including verbs in the URL. Ma=
ybe I need to read more on that.


Thanks again.
   


   






   






   
------=_Part_364952_663866500.1435156723971
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><div style=3D"color:#000;background-color:#fff;font-family:verdana=
, helvetica, sans-serif;font-size:13px;">  <div class=3D"qtdSeparateBR"><br=
><br></div><div id=3D"yui_3_16_0_1_1435155531550_8181" class=3D"yahoo_quote=
d"> <div id=3D"yui_3_16_0_1_1435155531550_8180" style=3D"font-family: verda=
na, helvetica, sans-serif;font-size: 13px;"> <div id=3D"yui_3_16_0_1_143515=
5531550_8179" style=3D"font-family: HelveticaNeue, Helvetica Neue, Helvetic=
a, Arial, Lucida Grande, sans-serif;font-size: 16px;"><div id=3D"yui_3_16_0=
_1_1435155531550_8185" class=3D"y_msg_container"><div id=3D"yiv2464374238">=
<div id=3D"yui_3_16_0_1_1435155531550_8184"><br><div id=3D"yui_3_16_0_1_143=
5155531550_8192" class=3D"yiv2464374238gmail_extra"><br clear=3D"none"><div=
 id=3D"yui_3_16_0_1_1435155531550_8191" class=3D"yiv2464374238gmail_quote">=
On Wed, Jun 24, 2015 at 2:09 PM, Kalana Guniyangoda <span dir=3D"ltr">&lt;<=
a rel=3D"nofollow" shape=3D"rect" ymailto=3D"mailto:[email protected]" targ=
et=3D"_blank" href=3D"mailto:[email protected]">[email protected]</a>&gt;</=
span> wrote:<br clear=3D"none"><blockquote id=3D"yui_3_16_0_1_1435155531550=
_8196" class=3D"yiv2464374238gmail_quote" style=3D"border-left:1px #ccc sol=
id;"><div id=3D"yui_3_16_0_1_1435155531550_8195"><div id=3D"yui_3_16_0_1_14=
35155531550_8194" style=3D"color:#000;background-color:#fff;font-family:ver=
dana, helvetica, sans-serif;font-size:13px;"><div id=3D"yui_3_16_0_1_143515=
5531550_12993" dir=3D"ltr">Hi J=C3=B8rn,</div><div id=3D"yui_3_16_0_1_14351=
55531550_8193" dir=3D"ltr">  Thank you very much for the response. It looks=
 like I have thought given more attention to HTTP request methods than repr=
esenting things as resources. For example I have tried to do lots of things=
 using a PUT or PATCH while I should have identified each as individual res=
ource instead. <br clear=3D"none"><br clear=3D"none">I should definitely th=
ink of using a hyper media format which would ease my work on constructing =
my responses. <br clear=3D"none"><br clear=3D"none">Thank a lot for the cle=
ar examples and response J=C3=B8rn. I realized that we are doing this discu=
ssion off the list. Shall I send a copy to the list since, I believe your e=
xamples and suggestions would help lot of other guys too.</div><div id=3D"y=
ui_3_16_0_1_1435155531550_8208" dir=3D"ltr"><br clear=3D"none"></div><div d=
ir=3D"ltr">Thank you very much.<br clear=3D"none"></div><div id=3D"yui_3_16=
_0_1_1435155531550_9532"><br clear=3D"none"><br clear=3D"none"></div><div i=
d=3D"yui_3_16_0_1_1435155531550_8207"> <div id=3D"yui_3_16_0_1_143515553155=
0_8206" style=3D"font-family:verdana, helvetica, sans-serif;font-size:13px;=
"> <div id=3D"yui_3_16_0_1_1435155531550_8205" style=3D"font-family:Helveti=
caNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-si=
ze:16px;"> <div dir=3D"ltr"> <font face=3D"Arial" size=3D"2"> On Wednesday,=
 June 24, 2015 2:00 PM, J=C3=B8rn Wildt &lt;<a rel=3D"nofollow" shape=3D"re=
ct" ymailto=3D"mailto:[email protected]" target=3D"_blank" href=3D"mailto:=
[email protected]">[email protected]</a>&gt; wrote:<br clear=3D"none"> </=
font> </div>  <br clear=3D"none"><br clear=3D"none"> <div id=3D"yui_3_16_0_=
1_1435155531550_8204"><div id=3D"yui_3_16_0_1_1435155531550_8203"><div id=
=3D"yui_3_16_0_1_1435155531550_8202"><div id=3D"yui_3_16_0_1_1435155531550_=
8201" dir=3D"ltr"><div id=3D"yui_3_16_0_1_1435155531550_8200"><div id=3D"yu=
i_3_16_0_1_1435155531550_8199"><div id=3D"yui_3_16_0_1_1435155531550_8198">=
<div id=3D"yui_3_16_0_1_1435155531550_8197">&gt; 1) What kind of HTTP reque=
st method you are using for /requsitions/{id}/accept, /requsitions/{id}/can=
cel<br clear=3D"none"><br clear=3D"none"></div>That would be POST for execu=
ting the actual operation. A GET returns a human readable description of th=
e resource (could also include an HTML form to allow developers to try it o=
ut directly).<br clear=3D"none"><br clear=3D"none">&gt; Would be restful if=
 we put "accepted", "canceled", "assessed" and "completed" as flags on requ=
isition resource and then used PUT or PATCH method to update that flag.<br =
clear=3D"none"><br clear=3D"none"></div>You could also do that and PATCH th=
ose boolean flags. But then it would be weird to include other values too (=
like for instance a time stamp, a reason and similar stuff that is somehow =
related to the operation). PUT is difficult as it was never designed for pa=
rtial updates (but this is debated among the experts ...) - but it would wo=
rk too. None of it can be said to be "RESTful" or not - REST is an architec=
tural style whereas the inner workings of PUT/POST/PATCH is more related to=
 the HTTP specification.<br clear=3D"none"><br clear=3D"none">&gt; if we us=
e parameters such as "?search=3D" or "?filter=3D", the client can't discove=
r it right? <br clear=3D"none"><br clear=3D"none"></div><div id=3D"yui_3_16=
_0_1_1435155531550_8214">Well, it depends ... remember to distinguish betwe=
en the "client" and what/who is driving the client. The client can discover=
, at runtime, how to construct the URL given that it knows it will contain =
a parameter named "search". This can be done with URL templates. But a huma=
n driving the client would have to understand the search expression format.=
 If a scripted program was driving the client then that program/script woul=
d have to understand the format too. But the client itself - the code that =
understand the message format - can discover how to construct a URL with th=
e "search" parameter in it.<br clear=3D"none"><br clear=3D"none"></div><div=
 id=3D"yui_3_16_0_1_1435155531550_8213">URL templates are supported in some=
 of the hypermedia formats out there (look for HAL, Mason, Siren, Collectio=
ns-JSON for more info). Mason for instance uses @controls to represent embe=
dded hypermedia controls. A "search" URL template could be represented like=
 this:<br clear=3D"none"></div><div><br clear=3D"none"></div>{<br clear=3D"=
none">&nbsp; Description: "This is a collection of items",<br clear=3D"none=
">&nbsp; @controls:<br clear=3D"none"></div><div id=3D"yui_3_16_0_1_1435155=
531550_8212">&nbsp; {<br clear=3D"none">&nbsp;&nbsp;&nbsp; search:<br clear=
=3D"none">&nbsp;&nbsp;&nbsp; {<br clear=3D"none"></div><div>&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp; href: "<a rel=3D"nofollow" shape=3D"rect" target=3D"_blank"=
 href=3D"http://myapi.com/items-search%7B">http://myapi.com/items-search{</=
a>?search}",<br clear=3D"none"></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is=
HrefTemplate: true,<br clear=3D"none"></div><div id=3D"yui_3_16_0_1_1435155=
531550_9531">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method: "GET",<br clear=3D"none=
"></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title: "This is a URL template =
for searching for other items in the collection"<br clear=3D"none"></div><d=
iv id=3D"yui_3_16_0_1_1435155531550_8211">&nbsp;&nbsp;&nbsp; }<br clear=3D"=
none">&nbsp; }<br clear=3D"none">}<br clear=3D"none"><div id=3D"yui_3_16_0_=
1_1435155531550_8210"><br clear=3D"none"></div></div></div><div id=3D"yui_3=
_16_0_1_1435155531550_8209"><br clear=3D"none"><div id=3D"yui_3_16_0_1_1435=
155531550_8269">On Tue, Jun 23, 2015 at 6:06 PM, Kalana Guniyangoda <span d=
ir=3D"ltr">&lt;<a rel=3D"nofollow" shape=3D"rect" ymailto=3D"mailto:kalguni=
@yahoo.com" target=3D"_blank" href=3D"mailto:[email protected]">kalguni@yah=
oo.com</a>&gt;</span> wrote:<br clear=3D"none"><blockquote id=3D"yui_3_16_0=
_1_1435155531550_8268" style=3D"border-left:1px #ccc solid;"><div id=3D"yui=
_3_16_0_1_1435155531550_8267"><div id=3D"yui_3_16_0_1_1435155531550_8266" s=
tyle=3D"color:#000;background-color:#fff;font-family:verdana, helvetica, sa=
ns-serif;font-size:13px;"><div dir=3D"ltr">Hi J=C3=B8rn,</div><div dir=3D"l=
tr"><br clear=3D"none"></div><div dir=3D"ltr">Thank you very much for the e=
xplanations and examples. I also read your blog-post on url structure and i=
t was very informative. If you don't mind I have few more questions. <br cl=
ear=3D"none"></div><div dir=3D"ltr"><br clear=3D"none"></div><div id=3D"yui=
_3_16_0_1_1435155531550_9581" dir=3D"ltr">1) What kind of HTTP request meth=
od you are using for <font size=3D"2"> /requsitions/{id}/accept,</font><fon=
t size=3D"2"> /requsitions/{id}/cancel<br clear=3D"none"></font></div><div =
id=3D"yui_3_16_0_1_1435155531550_10449" dir=3D"ltr"><font size=3D"2"><br cl=
ear=3D"none"></font></div><div id=3D"yui_3_16_0_1_1435155531550_9580" dir=
=3D"ltr"><font size=3D"2">2) Would be restful if we put "</font><font size=
=3D"2">accepted", "</font><font size=3D"2">canceled", "</font><font size=3D=
"2">assessed" and "</font><font id=3D"yui_3_16_0_1_1435155531550_9579" size=
=3D"2">completed" as flags on requisition resource and then used PUT or PAT=
CH method to update that flag. After reading the blog, I started to think m=
ore on client coupling to the API just because of the use of API specific U=
RL's or parameters. Even in this case, if we use flags, the client has to k=
now it before. Or is it possible to let them know it via hypertext in the r=
esource itself? if yes, what kind of a formatting you suggest?</font></div>=
<div dir=3D"ltr"><font size=3D"2"><br clear=3D"none"></font></div><div id=
=3D"yui_3_16_0_1_1435155531550_11102" dir=3D"ltr"><font id=3D"yui_3_16_0_1_=
1435155531550_11101" size=3D"2">3) I'm kinda stuck with search and filterin=
g operations for a collection. Paging of course could be done for a collect=
ion using GET parameters and then URL's for next and previous pages could b=
e included in the resource itself. However for search and filtering, if we =
use parameters such as "?search=3D" or "?filter=3D", the client can't disco=
ver it right? And that would leads to tight coupling between server and cli=
ent. <br clear=3D"none"></font></div><div id=3D"yui_3_16_0_1_1435155531550_=
11104" dir=3D"ltr"><font id=3D"yui_3_16_0_1_1435155531550_11103" size=3D"2"=
>Is it possible to include those parameters in the resource itself? if yet,=
 what would be the best way? what type of link relations you may use?</font=
></div><div dir=3D"ltr"><br clear=3D"none"></div><div dir=3D"ltr"><font siz=
e=3D"2">Again.. Thanks for your advices and suggestions..<br clear=3D"none"=
></font></div><br clear=3D"none"><div><br clear=3D"none"><br clear=3D"none"=
></div><div id=3D"yui_3_16_0_1_1435155531550_8265"> <div id=3D"yui_3_16_0_1=
_1435155531550_8264" style=3D"font-family:verdana, helvetica, sans-serif;fo=
nt-size:13px;"> <div id=3D"yui_3_16_0_1_1435155531550_8263" style=3D"font-f=
amily:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-=
serif;font-size:16px;"> <div dir=3D"ltr"> <font face=3D"Arial" size=3D"2"> =
On Monday, June 22, 2015 12:47 PM, J=C3=B8rn Wildt &lt;<a rel=3D"nofollow" =
shape=3D"rect" ymailto=3D"mailto:[email protected]" target=3D"_blank" href=
=3D"mailto:[email protected]">[email protected]</a>&gt; wrote:<br clear=
=3D"none"> </font> </div>  <br clear=3D"none"><br clear=3D"none"> <div id=
=3D"yui_3_16_0_1_1435155531550_8262"><div id=3D"yui_3_16_0_1_1435155531550_=
8261"><div id=3D"yui_3_16_0_1_1435155531550_8260"><div dir=3D"ltr">&gt;<fon=
t size=3D"2"> For the second question, "controller as a resource" seems to =
be a good option. But still I feel like it is a scapegoat version for inclu=
ding verbs in the URL. Maybe I need to read more on that.</font></div>
<div id=3D"yui_3_16_0_1_1435155531550_11106" dir=3D"ltr"><font id=3D"yui_3_=
16_0_1_1435155531550_11105" size=3D"2">My experience is that you can get a =
long way by restricting yourself to nouns only - and invent new nouns inste=
ad of adding verbs. But sometimes it gets a bit tricky: in my current work =
we are representing "requisitions" via an API (a requisition is a request f=
or some work to be done). Such a requisition can be manipulated in many dif=
ferent ways - it can be "accepted" by the receiver, it can be "canceled" by=
 the sender, it can be "assessed" by the receiver, "updated" by the sender =
and eventually "completed" by the receiver.</font></div>
<div dir=3D"ltr"><font size=3D"2">We ended up using "controller" resources =
for each of these operations - and together with embedded hypermedia links =
in the requisition representation it works very well.</font></div>
<div id=3D"yui_3_16_0_1_1435155531550_14559" dir=3D"ltr"><font size=3D"2">T=
he requisition itself is at /requsitions/{id} and each of the operations ar=
e at</font><font size=3D"2"> /requsitions/{id}/accept,</font><font id=3D"yu=
i_3_16_0_1_1435155531550_14558" size=3D"2"> /requsitions/{id}/cancel and so=
 on. Not that the actual URLs matter at all to the client since we include =
them in the requisition representation itself. Something like this:</font><=
/div>
<div dir=3D"ltr"><font size=3D"2">{</font><br clear=3D"none">
<font size=3D"2">&nbsp; Id: 1234,</font><br clear=3D"none">
<font size=3D"2">&nbsp; Description: "Blah ...",</font><br clear=3D"none">
<font size=3D"2">&nbsp; Deadline: "2015-06-25 12:00:00",</font><br clear=3D=
"none">
<font size=3D"2">&nbsp; Links:</font><br clear=3D"none">
<font size=3D"2">&nbsp; {</font><br clear=3D"none">
<font size=3D"2">&nbsp;&nbsp;&nbsp; accept: "... full path to accept contro=
ller",</font><br clear=3D"none">
<font size=3D"2">&nbsp;&nbsp;&nbsp; cancel: "... full path to cancel contro=
ller",</font><br clear=3D"none">
<font size=3D"2">&nbsp; }</font><br clear=3D"none">
<font size=3D"2">}</font></div>
<div dir=3D"ltr"><font size=3D"2">/J=C3=B8rn</font><br clear=3D"none"></div=
>
<div id=3D"yui_3_16_0_1_1435155531550_8259" style=3D"border-left:1px #ccc s=
olid;">




<u></u>


















=20
<div id=3D"yui_3_16_0_1_1435155531550_8258" style=3D"background-color:#fff;=
">
<span>&nbsp;</span>




<div id=3D"yui_3_16_0_1_1435155531550_14533">
  <div id=3D"yui_3_16_0_1_1435155531550_14532">




    <div><div>
=20=20=20=20=20=20
=20=20=20=20=20=20
      <div></div><div style=3D"color:#000;background-color:#fff;font-family=
:verdana, helvetica, sans-serif;font-size:10px;"><font size=3D"2">Thank you=
 very much for the responses Aristotle, Erik, Vinod and Jeff<br clear=3D"no=
ne"><br clear=3D"none">&nbsp;I think the answer for first question is clear=
 that it is better to use URL's which give us a meaningful URL even thought=
 it is long.<br clear=3D"none"><br clear=3D"none">&nbsp;For the second ques=
tion, "controller as a resource" seems to be a good option. But still I fee=
l like it is a scapegoat version for including verbs in the URL. Maybe I ne=
ed to read more on that.<br clear=3D"none"><br clear=3D"none"></font><div d=
ir=3D"ltr"><font size=3D"2">Thanks again.</font></div><div><br clear=3D"non=
e"></div></div>


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


=20=20=20=20
    <div style=3D"color:#fff;min-height:0;"></div></div>




</div>






=20=20












</div></div></div><br clear=3D"none"><br clear=3D"none"></div>  </div> </di=
v>  </div></div></div></div></div></blockquote></div><br clear=3D"none"></d=
iv></div></div><br clear=3D"none"><br clear=3D"none"></div>  </div> </div> =
 </div></div></div></blockquote></div><br clear=3D"none"></div></div></div>=
<br><br></div>  </div> </div>  </div> </div></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>

    <div id=3D"fromDMARC" style=3D"margin-top: 10px;">
        <hr style=3D"height:2px ; border-width:0; color:#E3E3E3; background=
-color:#E3E3E3;">
        Posted by: Kalana Guniyangoda &lt;[email protected]&gt;        <hr =
style=3D"height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3=
E3;">
     </div>
    <div style=3D"clear:both"> </div>

    <table cellspacing=3D4px style=3D"margin-top: 10px; 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/19723;_ylc=3DX3oDMTJxdG1kbWs4BF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3J=
wc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NzIzBHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTQzNj=
M2MDU4OQ--?act=3Dreply&messageNum=3D19723">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%20Fw%3A%20%=
5Brest-discuss%5D%20URI%20construction%20for%20REST%20API%20and%20use%20of%=
20verbs%20as%20resource%3F" style=3D"text-decoration: 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%=
20Fw%3A%20%5Brest-discuss%5D%20URI%20construction%20for%20REST%20API%20and%=
20use%20of%20verbs%20as%20resource%3F" style=3D"text-decoration: none; colo=
r: #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=3DX3oDMTJlZjY4ZTc1BF9TAzk3MzU5NzE0BGdycElkAzQzMTky=
NTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQzNjM2MDU4OQ-=
-" 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/19723;_ylc=3DX3oDMTM2dTg3Yms3BF9TAzk3MzU5=
NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BG1zZ0lkAzE5NzIzBHNlYwNmdHI=
Ec2xrA3Z0cGMEc3RpbWUDMTQzNjM2MDU4OQR0cGNJZAMxOTcyMw--" style=3D"text-decora=
tion: none; color: #2D50FD;">Messages in this topic</a>
                (1)
                      </td>
        </tr>
      </tbody>
    </table>

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

<!------- 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=3DX3oDMTJlMDU1ZjVqBF9TAzk3MzU5NzE0BGdycElkAzQzMTkyNTUEZ3Jwc3BJ=
ZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQzNjM2MDU4OQ--" 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=3DX3oDMTJmZjdiYWhsBF9TAzk3MzU5NzE0BGdycElkAzQzM=
TkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0MzYzNjA1=
ODk-" style=3D"text-decoration: none;">New Members</a></span>
      <span class=3D"ct" style=3D"color: #ff7900;">4</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=3DX3oDMTJkbTM0N2g3BF9TAzk3ND=
c2NTkwBGdycElkAzQzMTkyNTUEZ3Jwc3BJZAMxNzA1NzAxMDE0BHNlYwNmdHIEc2xrA2dmcARzd=
GltZQMxNDM2MzYwNTg5" 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=3D19723/stime=3D1436360589" 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 -->


------=_Part_364952_663866500.1435156723971--