<div dir="ltr">The documentation for creating plugins is pretty good.  You can find it here:<div><br></div><div><a href="http://www.apiman.io/latest/developer-guide.html#_plugins">http://www.apiman.io/latest/developer-guide.html#_plugins</a><br></div><div><br></div><div>Section 4.1 describes what an Apiman plugin looks like (how to create one).  Section 4.2 describes a **Policy** plugin (there are other kinds, but you want a Policy Plugin).  And sections 4.3 and 4.4 describe testing and using the policy plugin you create.  You can skip section 4.5 - it&#39;s not relevant for what you want to do.</div><div><br></div><div>    Note: Pay special attention to the section about &quot;IDataPolicy&quot; since that will be important for this policy (you&#39;ll need to count bytes as they are sent so you can fail the request when it exceeds your limit).</div><div><br></div><div>You can find examples of plugins here:</div><div><br></div><div><a href="https://github.com/apiman/apiman-plugins">https://github.com/apiman/apiman-plugins</a><br></div><div><br></div><div>Each sub-module is an example of a real Apiman plugin.</div><div><br></div><div>You will need to have some standard Java development experience to create your own custom policy plugin.  But it&#39;s actually quite easy!</div><div><br></div><div>-Eric</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 5, 2018 at 9:04 AM, Ashish Patel <span dir="ltr">&lt;<a href="mailto:ashish.patel@futuregroup.in" target="_blank">ashish.patel@futuregroup.in</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div class="m_6088789771486935179WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">I am trying to achieve the first one “limit every request to a certain size limit” per API. Thought can use Transfer Quota policy for the same with below values.
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">However, I see your point
</span><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">“6000 Bytes” of “upload” data per “API” per “Month” / “Year” will not help as it will give issues after combined requests crosses 6000 bytes.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Can you please suggest pointer to write the custom policy plugin to achieve the request size limiter ? (Upload is what we are targeting).<u></u><u></u></span></p><span class="">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-IN" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Thanks &amp; Regards,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-IN" style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Ashish Patel<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
</span><p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;">From:</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;"> Eric Wittmann [mailto:<a href="mailto:eric.wittmann@redhat.com" target="_blank">eric.wittmann@redhat.<wbr>com</a>]
<br>
<b>Sent:</b> Thursday, April 05, 2018 18:04<br>
<b>To:</b> Ashish Patel<br>
<b>Cc:</b> Jakub Čecháček; <a href="mailto:apiman-user@lists.jboss.org" target="_blank">apiman-user@lists.jboss.org</a></span></p><div><div class="h5"><br>
<b>Subject:</b> Re: [Apiman-user] Transfer Quota Policy<u></u><u></u></div></div><p></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">I&#39;m not sure I understand exactly.  Are you trying to limit every request to a certain size limit?  Or are you trying to limit the total number of bytes for all requests by a user to an API over a given amount of time.<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The Quota policy performs the latter function:  it allows you to limit the total # of bytes that a user can upload over a given time window (e.g. they can only upload 1GB per month).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">If what you want is a request size limiter, then you might need to create a custom policy plugin.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">-Eric<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Thu, Apr 5, 2018 at 1:59 AM, Ashish Patel &lt;<a href="mailto:ashish.patel@futuregroup.in" target="_blank">ashish.patel@futuregroup.in</a>&gt; wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Thanks very much Jakub, for explaining it in detail – I understand that – will do more testing.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Our main requirement is to restrict consumers with Transfer Quota (say 6000 bytes), for all the requests
 (meaning reset never happens) – believe this we can achieve with “6000 Bytes” of “upload” data per “API” per “Month” / “Year”.  In my below test, it was getting reset every second and I was not getting desired result.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Thanks &amp; Regards,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Ashish Patel</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;">From:</span></b><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;"> Jakub Čecháček [mailto:<a href="mailto:jcechace@gmail.com" target="_blank">jcechace@gmail.com</a>]
<br>
<b>Sent:</b> Saturday, March 31, 2018 22:48<br>
<b>To:</b> Ashish Patel<br>
<b>Cc:</b> <a href="mailto:apiman-user@lists.jboss.org" target="_blank">apiman-user@lists.jboss.org</a>; Marc Savy<br>
<b>Subject:</b> Re: [Apiman-user] Transfer Quota Policy</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Hello Ashish, <u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">if I understand correctly you are confused why the request passes the first time while it gets denied the second time?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Simply the way this policy works is that it blocks all consecutive requests after the one which went over the quota util reset. Meaning we don&#39;t terminate requests in the middle. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Worst case this can means that with a limit of 1000 bytes you can do a first request with 999 bytes and still send a second one with 1000 bytes -- next one is guaranteed to be blocked
 though. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Regards, <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Jakub.<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Thu, Mar 29, 2018 at 6:46 AM, Ashish Patel &lt;<a href="mailto:ashish.patel@futuregroup.in" target="_blank">ashish.patel@futuregroup.in</a>&gt; wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><span style="color:#1f497d">Hi Marc,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:#1f497d">Sorry for sending direct mail, can you please help release below mail sent to group to all the audience ?</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="color:#1f497d">Thanks &amp; Regards,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:#1f497d">Ashish Patel</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="color:#1f497d"> </span><u></u><u></u></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Ashish Patel
<br>
<b>Sent:</b> Friday, March 23, 2018 16:47<br>
<b>To:</b> <a href="mailto:apiman-user@lists.jboss.org" target="_blank">apiman-user@lists.jboss.org</a><br>
<b>Subject:</b> Transfer Quota Policy<u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">I need small help understanding Transfer Quota policy.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Have applied transfer quota policy with below config – attached with one API , set up one client and tested with Rest Client.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><b>“6000 Bytes” of “upload” data per “API” per “Second”.</b><u></u><u></u></p>
<p class="MsoNormal"><b> </b><u></u><u></u></p>
<p class="m_6088789771486935179m-329555126996163315m-7668964410709410614msolistparagraph">1.<span style="font-size:7.0pt">      
</span>Sent single request which has request payload (upload) &gt; 6000 bytes – Instead of blocking it, it allowed the request and sent the response – However, Apiman is aware of the overshot transfer – can be seen from the Headers.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span style="color:red">x-transferquota-limit →6000</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:red">x-transferquota-remaining →-4019</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:red">x-transferquota-reset →0</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="m_6088789771486935179m-329555126996163315m-7668964410709410614msolistparagraph">2.<span style="font-size:7.0pt">      
</span>Sent back to back multiple request (same payload as above) and at times it failed with failure code : 10013, &quot;Transfer quota exceeded.&quot;. This means it is applying the policy but after some requests , not sure how many.
<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">x-policy-failure-code →10013<u></u><u></u></p>
<p class="MsoNormal">x-policy-failure-message →Transfer quota exceeded.<u></u><u></u></p>
<p class="MsoNormal">x-policy-failure-type →Other<u></u><u></u></p>
<p class="MsoNormal">x-powered-by →Undertow/1<u></u><u></u></p>
<p class="MsoNormal"><span style="color:red">x-transferquota-limit →6000</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:red">x-transferquota-remaining →-4019</span><u></u><u></u></p>
<p class="MsoNormal"><span style="color:red">x-transferquota-reset →0</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Any idea, why it’s not failing in #1 scenario – Ideally it must fail in all requests as payload size is greater than defined.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-IN">Thanks &amp; Regards,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-IN">Ashish Patel</span><u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
Apiman-user mailing list<br>
<a href="mailto:Apiman-user@lists.jboss.org" target="_blank">Apiman-user@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/apiman-user" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/apiman-user</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
Apiman-user mailing list<br>
<a href="mailto:Apiman-user@lists.jboss.org" target="_blank">Apiman-user@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/apiman-user" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/apiman-user</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>