summaryrefslogtreecommitdiffstats
path: root/archives/extend/attachments/20140520/32454f85/attachment.html
blob: 9b22f44b4343754ff032f223bfd215e5c185f144 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<tt>
&lt;div&nbsp;dir=&quot;ltr&quot;&gt;&lt;div&nbsp;class=&quot;gmail_extra&quot;&gt;&lt;span&nbsp;style=&quot;font-family:arial,sans-serif;font-size:13px&quot;&gt;Hi, Loïc.&lt;/span&gt;&lt;div&nbsp;style=&quot;font-family:arial,sans-serif;font-size:13px&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div&nbsp;style=&quot;font-family:arial,sans-serif;font-size:13px&quot;&gt;<br>
Thanks&nbsp;for&nbsp;having&nbsp;taken&nbsp;the&nbsp;time&nbsp;to&nbsp;reply.&nbsp;In&nbsp;some&nbsp;of&nbsp;my&nbsp;questions&nbsp;I&nbsp;think&nbsp;I&nbsp;didn&#39;t&nbsp;explain&nbsp;myself&nbsp;correctly&nbsp;so&nbsp;I&#39;ll&nbsp;give&nbsp;it&nbsp;another&nbsp;go.&lt;br&gt;&lt;div&nbsp;class=&quot;gmail_extra&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;div&nbsp;class=&quot;gmail_quote&quot;&gt;&lt;div&nbsp;class=&quot;im&quot;&gt;<br>
On&nbsp;20&nbsp;May&nbsp;2014&nbsp;19:46,&nbsp;Loïc&nbsp;Hoguin &lt;span&nbsp;dir=&quot;ltr&quot;&gt;&lt;&lt;a&nbsp;href=&quot;mailto:[email protected]&quot;&nbsp;target=&quot;_blank&quot;&gt;[email protected]&lt;/a&gt;&gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
Hi,&lt;div&gt;&lt;br&gt;&lt;br&gt;On&nbsp;05/20/2014&nbsp;06:27&nbsp;PM,&nbsp;Paulo&nbsp;F.&nbsp;Oliveira&nbsp;wrote:&lt;br&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
Hello.&lt;br&gt;&lt;br&gt;First&nbsp;of&nbsp;all,&nbsp;thanks&nbsp;for&nbsp;the&nbsp;great&nbsp;work&nbsp;you&#39;ve&nbsp;done&nbsp;with&nbsp;cowboy.&nbsp;I&#39;ve&lt;br&gt;been&nbsp;using&nbsp;it&nbsp;with&nbsp;a&nbsp;fait&nbsp;amount&nbsp;of&nbsp;success&nbsp;and&nbsp;I&#39;m&nbsp;a&nbsp;fairly&nbsp;new&nbsp;Erlang&lt;br&gt;developer.&nbsp;I&#39;m&nbsp;mainly&nbsp;interested&nbsp;in&nbsp;the&nbsp;REST&nbsp;&quot;interface&quot;&nbsp;of&nbsp;the&lt;br&gt;<br>
application&nbsp;and&nbsp;its&nbsp;way&nbsp;of&nbsp;doing&nbsp;RESTful&nbsp;things,&nbsp;and&nbsp;I&nbsp;like&nbsp;the&nbsp;way&nbsp;you&lt;br&gt;did&nbsp;it&nbsp;(what&nbsp;with&nbsp;all&nbsp;the&nbsp;content_types_provided,&nbsp;service_available,&lt;br&gt;etc.&nbsp;functions).&nbsp;I&#39;ve&nbsp;tested&nbsp;the&nbsp;way&nbsp;the&nbsp;system&nbsp;reacted&nbsp;to&nbsp;the&nbsp;different&lt;br&gt;<br>
Accept,&nbsp;Content-Type,&nbsp;etc.&nbsp;headers&nbsp;and&nbsp;always&nbsp;got&nbsp;very&nbsp;well-opinionated&lt;br&gt;responses&nbsp;(406,&nbsp;415,&nbsp;...).&lt;br&gt;&lt;br&gt;A&nbsp;couple&nbsp;of&nbsp;questions&nbsp;remain&nbsp;though&nbsp;(I&#39;m&nbsp;sorry&nbsp;if&nbsp;they&#39;ve&nbsp;been&nbsp;asked&lt;br&gt;already&nbsp;but&nbsp;I&#39;ve&nbsp;searched&nbsp;the&nbsp;web&nbsp;for&nbsp;answers&nbsp;and&nbsp;read&nbsp;the&nbsp;available&lt;br&gt;<br>
docs&nbsp;and&nbsp;couldn&#39;t&nbsp;find&nbsp;them):&lt;br&gt;&lt;br&gt;1.&nbsp;is&nbsp;it&nbsp;expected&nbsp;that,&nbsp;if&nbsp;I&nbsp;use&nbsp;cowboy_req:reply/2&nbsp;in&nbsp;a&nbsp;GET&nbsp;handler&lt;br&gt;(coming&nbsp;from&nbsp;content_types_provided),&nbsp;the&nbsp;onresponse/4&nbsp;hook&nbsp;be&nbsp;called&lt;br&gt;twice?&nbsp;I&nbsp;guess&nbsp;one&nbsp;is&nbsp;due&nbsp;to&nbsp;the&nbsp;reply&nbsp;and&nbsp;the&nbsp;other&nbsp;one&nbsp;due&nbsp;to&nbsp;the&lt;br&gt;<br>
workflow&nbsp;of&nbsp;the&nbsp;request,&nbsp;but&nbsp;is&nbsp;there&nbsp;a&nbsp;way&nbsp;to&nbsp;prevent&nbsp;the&nbsp;second&nbsp;execution?&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;/div&gt;If&nbsp;you&nbsp;reply&nbsp;from&nbsp;a&nbsp;callback&nbsp;you&nbsp;must&nbsp;call&nbsp;{halt,&nbsp;Req,&nbsp;State}&nbsp;to&nbsp;stop&nbsp;processing.&lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;<br>
Got&nbsp;it!&lt;/div&gt;&lt;div&nbsp;class=&quot;im&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;&lt;div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
2.&nbsp;if&nbsp;I&nbsp;want&nbsp;to&nbsp;JSON-parse&nbsp;ALL&nbsp;my&nbsp;requests&nbsp;should&nbsp;I&nbsp;a)&nbsp;use&nbsp;the&lt;br&gt;onrequest/1&nbsp;hook&nbsp;or&nbsp;b)&nbsp;do&nbsp;this&nbsp;on&nbsp;a&nbsp;per-request&nbsp;basis?&nbsp;Because&nbsp;I&#39;d&nbsp;like&lt;br&gt;to&nbsp;reply&nbsp;with&nbsp;a&nbsp;400&nbsp;ASAP&nbsp;but&nbsp;keep&nbsp;going&nbsp;if&nbsp;the&nbsp;JSON&nbsp;validates&nbsp;(I&#39;m&nbsp;going&lt;br&gt;<br>
to&nbsp;use&nbsp;JSON-schema&nbsp;for&nbsp;validating&nbsp;input);&nbsp;and,&nbsp;if&nbsp;possible,&nbsp;have&nbsp;the&lt;br&gt;JSON-parsed&nbsp;body&nbsp;stored&nbsp;somewhere&nbsp;for&nbsp;future&nbsp;manipulation.&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;/div&gt;It&nbsp;makes&nbsp;little&nbsp;sense&nbsp;to&nbsp;do&nbsp;it&nbsp;before&nbsp;the&nbsp;accept&nbsp;callback&nbsp;you&nbsp;define.&nbsp;Not&nbsp;only&nbsp;because&nbsp;you&nbsp;will&nbsp;duplicate&nbsp;content-type&nbsp;checks&nbsp;and&nbsp;whatnot,&nbsp;but&nbsp;also&nbsp;because&nbsp;you&nbsp;don&#39;t&nbsp;actually&nbsp;win&nbsp;anything&nbsp;from&nbsp;doing&nbsp;this.&nbsp;If&nbsp;you&nbsp;are&nbsp;using&nbsp;JSON,&nbsp;then&nbsp;JSON&nbsp;processing&nbsp;will&nbsp;take&nbsp;infinitely&nbsp;more&nbsp;resources&nbsp;than&nbsp;the&nbsp;REST&nbsp;code.&lt;/blockquote&gt;<br>
&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;OK,&nbsp;I&#39;ll&nbsp;probably&nbsp;stick&nbsp;with&nbsp;a&nbsp;&quot;helper&quot;&nbsp;function&nbsp;that&#39;ll&nbsp;do&nbsp;this&nbsp;for&nbsp;me&nbsp;and&nbsp;reply&nbsp;in&nbsp;case&nbsp;there&nbsp;are&nbsp;validation&nbsp;errors.&lt;/div&gt;&lt;div&gt;I&nbsp;only&nbsp;found&nbsp;the&nbsp;flow&nbsp;diagrams&nbsp;for&nbsp;the&nbsp;requests&nbsp;today&nbsp;after&nbsp;I&nbsp;had&nbsp;sent&nbsp;this&nbsp;message,&nbsp;and&nbsp;they&nbsp;helped&nbsp;a&nbsp;lot.&lt;/div&gt;<br>
&lt;div&nbsp;class=&quot;im&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;&lt;div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
3.&nbsp;I&nbsp;haven&#39;t&nbsp;seen&nbsp;examples&nbsp;that&nbsp;made&nbsp;use&nbsp;of&nbsp;the&nbsp;State&nbsp;(from&nbsp;the&nbsp;function&lt;br&gt;returns).&nbsp;When&nbsp;should&nbsp;I&nbsp;use&nbsp;this&nbsp;instead&nbsp;of&nbsp;the&nbsp;Request&nbsp;metadata?&nbsp;I&#39;d&lt;br&gt;like&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;set&nbsp;a&nbsp;generic&nbsp;error&nbsp;state&nbsp;for&nbsp;a&nbsp;request&nbsp;(either&nbsp;in&lt;br&gt;<br>
meta&nbsp;ou&nbsp;State)&nbsp;and&nbsp;that&nbsp;have&nbsp;a&nbsp;&quot;standard&quot;&nbsp;error&nbsp;response&nbsp;be&nbsp;created&nbsp;at&nbsp;a&lt;br&gt;later&nbsp;time&nbsp;(in&nbsp;a&nbsp;unique&nbsp;function,&nbsp;for&nbsp;example&nbsp;-&nbsp;e.g.&nbsp;onresponse/4).&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;/div&gt;State&nbsp;is&nbsp;for&nbsp;the&nbsp;functions&nbsp;within&nbsp;the&nbsp;current&nbsp;module.&nbsp;Look&nbsp;at&nbsp;cowboy_static&nbsp;for&nbsp;an&nbsp;example.&lt;/blockquote&gt;<br>
&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;State&nbsp;allows&nbsp;me&nbsp;to,&nbsp;well,&nbsp;keep&nbsp;state,&nbsp;for&nbsp;a&nbsp;request&nbsp;&quot;travelling&quot;&nbsp;through&nbsp;functions,&nbsp;right,&nbsp;and&nbsp;I&nbsp;can&nbsp;change&nbsp;it&nbsp;whenever&nbsp;I&nbsp;want&nbsp;just&nbsp;before&nbsp;returning&nbsp;from&nbsp;a&nbsp;function&nbsp;that&nbsp;is&nbsp;executed&nbsp;prior&nbsp;to&nbsp;another&nbsp;one&nbsp;(the&nbsp;only&nbsp;function&nbsp;for&nbsp;which&nbsp;this&nbsp;doesn&#39;t&nbsp;seem&nbsp;to&nbsp;make&nbsp;since&nbsp;is&nbsp;the&nbsp;last&nbsp;one&nbsp;cowboy&nbsp;calls&nbsp;before&nbsp;actually&nbsp;replying&nbsp;to&nbsp;the&nbsp;client)?&nbsp;At&nbsp;the&nbsp;same&nbsp;time,&nbsp;so&nbsp;does&nbsp;the&nbsp;request&nbsp;meta,&nbsp;from&nbsp;what&nbsp;I&nbsp;understood&nbsp;from&nbsp;the&nbsp;manual.&nbsp;So&nbsp;what&nbsp;is&nbsp;the&nbsp;difference&nbsp;between&nbsp;one&nbsp;and&nbsp;the&nbsp;other&nbsp;and&nbsp;when&nbsp;would&nbsp;you&nbsp;recommend&nbsp;one&nbsp;or&nbsp;the&nbsp;other.&lt;/div&gt;<br>
&lt;div&nbsp;class=&quot;im&quot;&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;&lt;div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
4.&nbsp;is&nbsp;there&nbsp;anything&nbsp;like&nbsp;a&nbsp;catch-all&nbsp;exception&nbsp;handler?&nbsp;I&#39;d&nbsp;like&nbsp;to&lt;br&gt;catch&nbsp;exceptions&nbsp;that&nbsp;occur&nbsp;anywhere&nbsp;so&nbsp;I&nbsp;could&nbsp;log&nbsp;them&nbsp;and&nbsp;analyze&lt;br&gt;them&nbsp;at&nbsp;a&nbsp;later&nbsp;moment.&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;/div&gt;You&nbsp;can&nbsp;add&nbsp;your&nbsp;own&nbsp;error_logger&nbsp;handler,&nbsp;or&nbsp;use&nbsp;something&nbsp;like&nbsp;lager.&nbsp;All&nbsp;errors&nbsp;end&nbsp;up&nbsp;sending&nbsp;a&nbsp;message&nbsp;to&nbsp;error_logger.&lt;/blockquote&gt;<br>
&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;I&#39;ll&nbsp;do&nbsp;this,&nbsp;thanks.&lt;/div&gt;&lt;div&nbsp;class=&quot;im&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
&lt;div&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;I&#39;m&nbsp;probably&nbsp;abusing&nbsp;the&nbsp;onresponse/onrequest&nbsp;hooks&nbsp;already,&nbsp;so&nbsp;your&lt;br&gt;<br>
answers&nbsp;should&nbsp;help&nbsp;me&nbsp;clarify&nbsp;this.&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;/div&gt;Sounds&nbsp;like&nbsp;it!&lt;br&gt;&lt;br&gt;&lt;blockquote&nbsp;class=&quot;gmail_quote&quot;&nbsp;style=&quot;margin:0px&nbsp;0px&nbsp;0px&nbsp;0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex&quot;&gt;<br>
Thanks.&lt;br&gt;&lt;br&gt;-&nbsp;Paulo&lt;br&gt;&lt;br&gt;&lt;br&gt;______________________________&lt;u&gt;&lt;/u&gt;_________________&lt;br&gt;Extend&nbsp;mailing&nbsp;list&lt;br&gt;&lt;a&nbsp;href=&quot;mailto:[email protected]&quot;&nbsp;target=&quot;_blank&quot;&gt;[email protected]&lt;/a&gt;&lt;br&gt;&lt;a&nbsp;href=&quot;https://lists.ninenines.eu/listinfo/extend&quot;&nbsp;target=&quot;_blank&quot;&gt;https://lists.ninenines.eu/&lt;u&gt;&lt;/u&gt;listinfo/extend&lt;/a&gt;&lt;br&gt;<br>
&lt;br&gt;&lt;font&nbsp;color=&quot;#888888&quot;&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;font&nbsp;color=&quot;#888888&quot;&gt;&lt;br&gt;-- &lt;br&gt;Loïc&nbsp;Hoguin&lt;br&gt;&lt;a&nbsp;href=&quot;http://ninenines.eu/&quot;&nbsp;target=&quot;_blank&quot;&gt;http://ninenines.eu&lt;/a&gt;&lt;br&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&nbsp;class=&quot;gmail_extra&quot;&nbsp;style=&quot;font-family:arial,sans-serif;font-size:13px&quot;&gt;<br>
Thanks.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;<br>

</tt>