<div dir="ltr"><div><span style="font-size:13px">&gt; I think a cleaner payload would be: ...</span><br></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">Unless I overlooked something the two example payloads are identical.  Regardless I agree that current JSON responses could be improved. </span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">However in this particular case I am not sure whether &quot;duplicities&quot; are an issue. The </span><span style="font-size:13px">requested resources (services) just </span>happened to have the same parent<span style="font-size:13px">. Also extracting these duplicities would mean that resources listed under .../services and /services/{id} would be different, which doesn&#39;t make sense as the former is just a list of all services available after providing {id} as part of the url.</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">For my point of view a possible issue is the use of  &quot;id&quot;  attributes -- such attributes lack semantics and resource urls should be used instead (as it allows transition between resources) [1].  Nevertheless there is a plenty of APIs which are using ID attributes so I would consider this to be of minor importance.</span><br></div><div><br></div>&gt; <span style="font-size:13px">When an organization is created, seems like organizationId is </span><span style="font-size:13px">derived from organizationName? What&#39;s the purpose of two fields </span><span style="font-size:13px">uniquely identifying an organization?</span><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">As you said, id is </span><span style="font-size:13px">derived not copied -- some characters (such as whitespace) are removed or replaced, thus the value of both fields can be different. Name is meant for human users to read, id as a system identifier. </span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">&gt; </span><span style="font-size:13px"> </span><span style="font-size:13px">Can id, name, description attributes for service be renamed to </span><span style="font-size:13px">serviceId, serviceName, serviceDescription?</span></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">The requested resource is list of all services. I would kinda assume that all attributes (unless something indicates otherwise) are attributes of service object. So what would be the point of making the attribute names more complicated? Again changing the attributes here would require to mirror these changes to .../services/{id} </span><br></div><div><span style="font-size:13px"><br></span></div><div><span style="font-size:13px">[1] Interesting presentation about REST api design. Unfortunately author mixed in some Czech for no reason. The important stuff is in English though. </span><a href="https://speakerdeck.com/honzajavorek/rest-api-manual">https://speakerdeck.com/honzajavorek/rest-api-manual</a></div><div><br></div><div>Jakub. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 23, 2015 at 12:49 AM, Arun Gupta <span dir="ltr">&lt;<a href="mailto:arun.gupta@gmail.com" target="_blank">arun.gupta@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Moving to swagger will be good!<br>
<br>
Can reasonable defaults be assumed? For example, not setting<br>
endpointType currently sets it to null. It&#39;ll be convenient if it is<br>
assumed it to be &quot;rest&quot;. That is going to be the most common use case<br>
anyway. How does the processing differ if the endpointType is set to<br>
&quot;soap&quot;?<br>
<br>
Another question ...<br>
<br>
Accessing the list of services for an organization as:<br>
<br>
curl --user admin:admin123! -H &quot;Accept: application/json&quot;<br>
<a href="http://192.168.99.103:8082/apiman/organizations/everest/services" rel="noreferrer" target="_blank">http://192.168.99.103:8082/apiman/organizations/everest/services</a><br>
<br>
And the generated payload is:<br>
<br>
[{&quot;organizationId&quot;:&quot;everest&quot;,&quot;organizationName&quot;:&quot;everest&quot;,&quot;id&quot;:&quot;catalog&quot;,&quot;name&quot;:&quot;catalog&quot;,&quot;description&quot;:&quot;catalog<br>
service&quot;,&quot;createdOn&quot;:1437575090081},{&quot;organizationId&quot;:&quot;everest&quot;,&quot;organizationName&quot;:&quot;everest&quot;,&quot;id&quot;:&quot;order&quot;,&quot;name&quot;:&quot;order&quot;,&quot;description&quot;:&quot;order<br>
service&quot;,&quot;createdOn&quot;:1437575867804},{&quot;organizationId&quot;:&quot;everest&quot;,&quot;organizationName&quot;:&quot;everest&quot;,&quot;id&quot;:&quot;user&quot;,&quot;name&quot;:&quot;user&quot;,&quot;description&quot;:&quot;user<br>
service&quot;,&quot;createdOn&quot;:1437575649446}]<br>
<br>
A few issues with this ...<br>
<br>
- Why organizationId and organizationName are repeated with each<br>
service? I think a cleaner payload would be:<br>
<br>
[{&quot;organizationId&quot;:&quot;everest&quot;,&quot;organizationName&quot;:&quot;everest&quot;,&quot;id&quot;:&quot;catalog&quot;,&quot;name&quot;:&quot;catalog&quot;,&quot;description&quot;:&quot;catalog<br>
service&quot;,&quot;createdOn&quot;:1437575090081},{&quot;organizationId&quot;:&quot;everest&quot;,&quot;organizationName&quot;:&quot;everest&quot;,&quot;id&quot;:&quot;order&quot;,&quot;name&quot;:&quot;order&quot;,&quot;description&quot;:&quot;order<br>
service&quot;,&quot;createdOn&quot;:1437575867804},{&quot;organizationId&quot;:&quot;everest&quot;,&quot;organizationName&quot;:&quot;everest&quot;,&quot;id&quot;:&quot;user&quot;,&quot;name&quot;:&quot;user&quot;,&quot;description&quot;:&quot;user<br>
service&quot;,&quot;createdOn&quot;:1437575649446}]<br>
<br>
- When an organization is created, seems like organizationId is<br>
derived from organizationName? What&#39;s the purpose of two fields<br>
uniquely identifying an organization?<br>
<br>
- Can id, name, description attributes for service be renamed to<br>
serviceId, serviceName, serviceDescription?<br>
<br>
Thanks,<br>
Arun<br>
<br>
On Wed, Jul 22, 2015 at 10:17 AM, Eric Wittmann<br>
<div class="HOEnZb"><div class="h5">&lt;<a href="mailto:eric.wittmann@redhat.com">eric.wittmann@redhat.com</a>&gt; wrote:<br>
&gt; Fair questions all.<br>
&gt;<br>
&gt; - Everything is optional in the payload so that you can set individual<br>
&gt; properties without sending *everything*<br>
&gt; - Only the &#39;gateways&#39; has a default value - but it will default only if<br>
&gt; there is a single gateway installed in apiman.  if multiple gateways have<br>
&gt; been configured, then you must pick one<br>
&gt;<br>
&gt; We&#39;ll likely be moving the API documentation over to swagger at some point,<br>
&gt; replacing the miredot docs.<br>
&gt;<br>
&gt; -Eric<br>
&gt;<br>
&gt; On 7/22/2015 9:02 AM, Arun Gupta wrote:<br>
&gt;&gt;<br>
&gt;&gt; Here is the inbound payload for<br>
&gt;&gt;<br>
&gt;&gt; <a href="http://localhost:8080/apiman/organizations/organizationId/services/serviceId/versions/version" rel="noreferrer" target="_blank">http://localhost:8080/apiman/organizations/organizationId/services/serviceId/versions/version</a>:<br>
&gt;&gt;<br>
&gt;&gt; {<br>
&gt;&gt; endpointType:rest | soap<br>
&gt;&gt; publicService:boolean<br>
&gt;&gt; endpointProperties:{<br>
&gt;&gt; string =&gt;string<br>
&gt;&gt; }<br>
&gt;&gt; gateways:[<br>
&gt;&gt; {<br>
&gt;&gt; gatewayId:string<br>
&gt;&gt; }<br>
&gt;&gt; ]<br>
&gt;&gt; plans:[<br>
&gt;&gt; {<br>
&gt;&gt; version:string<br>
&gt;&gt; planId:string<br>
&gt;&gt; }<br>
&gt;&gt; ]<br>
&gt;&gt; endpoint:string<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; How do I know which parts of optional? Why &quot;gateways&quot; is an array of<br>
&gt;&gt; objects instead of array of string?<br>
&gt;&gt;<br>
&gt;&gt; Can there be defaults assumed if nothing is specified in the payload?<br>
&gt;&gt; For example, make the service public by default, use rest type, assign<br>
&gt;&gt; no plan, and have no endpoint properties.<br>
&gt;&gt;<br>
&gt;&gt; Created <a href="https://issues.jboss.org/browse/APIMAN-559" rel="noreferrer" target="_blank">https://issues.jboss.org/browse/APIMAN-559</a> for syntax highlighter.<br>
&gt;&gt;<br>
&gt;&gt; Arun<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Jul 22, 2015 at 8:33 AM, Eric Wittmann &lt;<a href="mailto:eric.wittmann@redhat.com">eric.wittmann@redhat.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; There is a feature request already in JIRA for allowing the POST (create<br>
&gt;&gt;&gt; new<br>
&gt;&gt;&gt; service version) to include all of the same information that a PUT would<br>
&gt;&gt;&gt; allow.  A future version will allow this.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    <a href="https://issues.jboss.org/browse/APIMAN-427" rel="noreferrer" target="_blank">https://issues.jboss.org/browse/APIMAN-427</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Which optional parts are not indicated?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Eric<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 7/21/2015 10:19 PM, Arun Gupta wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; POST on<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="http://localhost:8080/apiman/organizations/{organizationId}/services/{serviceId}/versions" rel="noreferrer" target="_blank">http://localhost:8080/apiman/organizations/{organizationId}/services/{serviceId}/versions</a><br>
&gt;&gt;&gt;&gt; takes only:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; {<br>
&gt;&gt;&gt;&gt; version:string<br>
&gt;&gt;&gt;&gt; cloneVersion:string<br>
&gt;&gt;&gt;&gt; clone:boolean<br>
&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; and returns all the information about the created endpoint, including<br>
&gt;&gt;&gt;&gt; all the information that needs to be set later by calling PUT on<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="http://localhost:8080/apiman/organizations/{organizationId}/services/{serviceId}/versions/{versionId}" rel="noreferrer" target="_blank">http://localhost:8080/apiman/organizations/{organizationId}/services/{serviceId}/versions/{versionId}</a>.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Was there discussion about taking in the relevant information as part<br>
&gt;&gt;&gt;&gt; of original POST request?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Also, optional JSON parts are not indicated in the payload. How can<br>
&gt;&gt;&gt;&gt; that be done?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Can an appropriate syntax highlighter be used?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Arun<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Tue, Jul 21, 2015 at 6:11 PM, Eric Wittmann<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:eric.wittmann@redhat.com">eric.wittmann@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; It depends on a number of variables.  But basically for each service<br>
&gt;&gt;&gt;&gt;&gt; you<br>
&gt;&gt;&gt;&gt;&gt; want to create you&#39;ll need at least:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; 1) create the service<br>
&gt;&gt;&gt;&gt;&gt; 2) create version of the service<br>
&gt;&gt;&gt;&gt;&gt; 3) update version with the desired settings (endpoint info, plans, etc)<br>
&gt;&gt;&gt;&gt;&gt; 4) publish version (pushes it to the gateway)<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; That would be for a public service with no policies.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; If you want to configure it with policies, then there are extra calls<br>
&gt;&gt;&gt;&gt;&gt; for<br>
&gt;&gt;&gt;&gt;&gt; that.  If you wanted to add a service definition (swagger) then there&#39;s<br>
&gt;&gt;&gt;&gt;&gt; a<br>
&gt;&gt;&gt;&gt;&gt; separate call for that.  Etc.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; You&#39;ll of course need an organization to hold the services.  You also<br>
&gt;&gt;&gt;&gt;&gt; need<br>
&gt;&gt;&gt;&gt;&gt; to create and lock plans if you intend to use multiple plans.  If you<br>
&gt;&gt;&gt;&gt;&gt; use<br>
&gt;&gt;&gt;&gt;&gt; plans (vs. public services) you&#39;ll need to create applications and then<br>
&gt;&gt;&gt;&gt;&gt; contracts between the apps and the service(s).  :)<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; -Eric<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On 7/21/2015 5:06 PM, Arun Gupta wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; This is helpful!<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; What is the minimum number of calls required for registering endpoints<br>
&gt;&gt;&gt;&gt;&gt;&gt; for a few services?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Arun<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Tue, Jul 21, 2015 at 7:11 AM, Eric Wittmann<br>
&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:eric.wittmann@redhat.com">eric.wittmann@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; There is a test plan in apiman that does all of this.  It can be<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; found<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; here:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://github.com/apiman/apiman/blob/master/test/suite/src/main/resources/scripts/api-manager-testPlan.xml" rel="noreferrer" target="_blank">https://github.com/apiman/apiman/blob/master/test/suite/src/main/resources/scripts/api-manager-testPlan.xml</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Each of the tests in the XML file is executed in order, starting with<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; this<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; one:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://github.com/apiman/apiman/blob/master/test/suite/src/main/resources/data/orgs/001_create-test.resttest" rel="noreferrer" target="_blank">https://github.com/apiman/apiman/blob/master/test/suite/src/main/resources/data/orgs/001_create-test.resttest</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; The format of each *.resttest file is:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; VERB /path/to/API/resource user/pass<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Request-Header-1: value<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Request-Header-2: value<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;      &quot;json&quot; : &quot;payload&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; ----<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; expectedResponseCode<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Expected-Response-Header-1: value<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Expected-Response-Header-2: value<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; {<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;      &quot;expected-json&quot; : &quot;response-payload&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; So basically you would be interested only in what is above the &quot;----&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; separator.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; You are right - we should write a blog post or document a hello world<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; use-case.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; -Eric<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; On 7/20/2015 7:11 PM, Arun Gupta wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Is there a sample that shows the complete creation/order of<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; organization, services, endpoints, etc using the REST API?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; The documents at [1] are helpful but a Hello World sample would be<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; very useful. I started creating a sample at [2].<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; [1] <a href="http://www.apiman.io/latest/api-manager-restdocs.html" rel="noreferrer" target="_blank">http://www.apiman.io/latest/api-manager-restdocs.html</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; [2]<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://github.com/arun-gupta/microservices/blob/master/microservice/docker/Dockerfile" rel="noreferrer" target="_blank">https://github.com/arun-gupta/microservices/blob/master/microservice/docker/Dockerfile</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Cheers,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Arun<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div><span class="im HOEnZb">--<br>
<a href="http://blog.arungupta.me" rel="noreferrer" target="_blank">http://blog.arungupta.me</a><br>
<a href="http://twitter.com/arungupta" rel="noreferrer" target="_blank">http://twitter.com/arungupta</a><br>
</span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Apiman-user mailing list<br>
<a href="mailto:Apiman-user@lists.jboss.org">Apiman-user@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/apiman-user" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/apiman-user</a><br>
</div></div></blockquote></div><br></div>