<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
span.apple-style-span
{mso-style-name:apple-style-span;}
span.hoenzb
{mso-style-name:hoenzb;}
span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Courier New";}
span.k
{mso-style-name:k;}
span.nc
{mso-style-name:nc;}
span.p
{mso-style-name:p;}
span.n
{mso-style-name:n;}
span.o
{mso-style-name:o;}
span.sd
{mso-style-name:sd;}
span.mi
{mso-style-name:mi;}
span.bp
{mso-style-name:bp;}
span.s
{mso-style-name:s;}
span.nb
{mso-style-name:nb;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:596527121;
mso-list-template-ids:-185816594;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi<o:p></o:p></p>
<p class="MsoNormal">I think we violate the DRY principal quite heavily when we define the data constraints in 3 different locations.<o:p></o:p></p>
<p class="MsoNormal">Here is an example:<span style="color:#1F497D"> (focusing on the ‘type’ field of ‘HealthMonitor’)</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><u><span style="color:#1F497D">1- </span>DB layer:<o:p></o:p></u></p>
<pre style="line-height:10.9pt"><span class="k"><b><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">class</span></b></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="nc"><b><span style="font-size:9.0pt;font-family:Consolas;color:#445588;border:none windowtext 1.0pt;padding:0in">HealthMonitor</span></b></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">model_base</span></span><span class="o"><b><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">BASEV2</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">models_v2</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">HasId</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">,</span></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">models_v2</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">HasTenant</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">):</span></span><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="sd"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">"""Represents a v2 quantum loadbalancer healthmonitor."""</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="mso-line-height-alt:10.9pt"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="nb"><b><span style="font-size:12.0pt;font-family:Consolas;color:#0086B3;border:none windowtext 1.0pt;padding:0in">type</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> <span class="o"><span style="border:none windowtext 1.0pt;padding:0in">=</span></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><span style="border:none windowtext 1.0pt;padding:0in">.</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><span style="border:none windowtext 1.0pt;padding:0in">.</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Enum</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span></span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">"PING"</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">"TCP"</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">"HTTP"</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">"HTTPS"</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></b></pre>
<pre style="mso-line-height-alt:10.9pt"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">name</span></span><span class="o"><span style="border:none windowtext 1.0pt;padding:0in">=</span></span></span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">"healthmontiors_type"</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">),</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></b></pre>
<pre style="mso-line-height-alt:10.9pt"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">nullable</span></span><span class="o"><span style="border:none windowtext 1.0pt;padding:0in">=</span></span></span></b><span class="bp"><b><span style="font-size:12.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">)</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></b></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">delay</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Integer</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">,</span></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">nullable</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span></span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">timeout</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Integer</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">,</span></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">nullable</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span></span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">max_retries</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Integer</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">,</span></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">nullable</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span></span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">http_method</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">String</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span></span><span class="mi"><span style="font-size:9.0pt;font-family:Consolas;color:#009999;border:none windowtext 1.0pt;padding:0in">16</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">))</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">url_path</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">String</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span></span><span class="mi"><span style="font-size:9.0pt;font-family:Consolas;color:#009999;border:none windowtext 1.0pt;padding:0in">255</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">))</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">expected_codes</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">String</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span></span><span class="mi"><span style="font-size:9.0pt;font-family:Consolas;color:#009999;border:none windowtext 1.0pt;padding:0in">64</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">))</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">status</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">String</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span></span><span class="mi"><span style="font-size:9.0pt;font-family:Consolas;color:#009999;border:none windowtext 1.0pt;padding:0in">16</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">),</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">nullable</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span></span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">admin_state_up</span></span> <span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Column</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(</span></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">sa</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">.</span></b></span><span class="n"><span style="border:none windowtext 1.0pt;padding:0in">Boolean</span></span><span class="p"><span style="border:none windowtext 1.0pt;padding:0in">(),</span></span> <span class="n"><span style="border:none windowtext 1.0pt;padding:0in">nullable</span></span><span class="o"><b><span style="border:none windowtext 1.0pt;padding:0in">=</span></b></span></span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">)</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><u><span style="color:#1F497D">2- </span>API layer:<o:p></o:p></u></p>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'health_monitors'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'id'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span></span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'allow_post'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'allow_put'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'validate'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span></span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'type:uuid'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">None</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">},</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'is_visible'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">True</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">},</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'tenant_id'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span></span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'allow_post'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">True</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'allow_put'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'validate'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span></span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'type:string'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">None</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">},</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'required_by_policy'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">True</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'is_visible'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">True</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">},</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<pre style="mso-line-height-alt:10.9pt"><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'type'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span></span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'allow_post'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="bp"><b><span style="font-size:12.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">True</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'allow_put'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="bp"><b><span style="font-size:12.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">False</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></b></pre>
<pre style="mso-line-height-alt:10.9pt"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'validate'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">{</span></span></span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'type:values'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> <span class="p"><span style="border:none windowtext 1.0pt;padding:0in">[</span></span></span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'PING'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'TCP'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'HTTP'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">,</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"> </span></b><span class="s"><b><span style="font-size:12.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'HTTPS'</span></b></span><span class="p"><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">]},</span></b></span><b><span style="font-size:12.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></b></pre>
<pre style="line-height:10.9pt"><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="s"><span style="font-size:9.0pt;font-family:Consolas;color:#DD1144;border:none windowtext 1.0pt;padding:0in">'is_visible'</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">:</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"> </span><span class="bp"><span style="font-size:9.0pt;font-family:Consolas;color:#999999;border:none windowtext 1.0pt;padding:0in">True</span></span><span class="p"><span style="font-size:9.0pt;font-family:Consolas;color:#333333;border:none windowtext 1.0pt;padding:0in">},</span></span><span style="font-size:9.0pt;font-family:Consolas;color:#333333"><o:p></o:p></span></pre>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><u><span style="color:#1F497D">3- </span>The UI layer:<o:p></o:p></u></p>
<p class="MsoNormal">In the UI the developer will probably will define this ‘type’ field as a combo box and will hard code the<span style="color:#1F497D">
</span>possible values (there is no other way since there is no {API | Config file}<span style="color:#1F497D">
</span>to get the constraints of an entity)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><u>What can we do?<o:p></o:p></u></p>
<p class="MsoNormal"><span style="color:#1F497D">T</span>he idea is to be able to define the constraints once and consume those constraints in the layers mentioned above.<span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">#option 1: define a “config” file that will contain the constraints in Quantum. The API layer and the DB layer will consume this configuration. The UI will have to get a copy of this file (since it a different project)<o:p></o:p></p>
<p class="MsoNormal">#option 2: define a “config” file that will contain the constraints in Quantum. The API layer and the DB layer will consume this configuration. The UI will consume it remotely through REST API.<o:p></o:p></p>
<p class="MsoNormal">#option 3: do nothing … and keep duplication the constraints
<span style="font-family:Wingdings">L</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">It is obvious that option 2 is much “cleaner” but it requires extending the REST API.<span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">Please let me know what do you think.<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">Thanks<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Avishay<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</body>
</html>