<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:25:39 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-3105] SPIKE:  Investigate OKAPI extensions to accommodate things like distributed configuration</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-3105</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;h2&gt;&lt;a name=&quot;Overview&quot;&gt;&lt;/a&gt;Overview&lt;/h2&gt;
&lt;p&gt;Following 
    &lt;span class=&quot;jira-issue-macro resolved&quot; data-jira-key=&quot;FOLIO-2875&quot; &gt;
                &lt;a href=&quot;https://folio-org.atlassian.net/browse/FOLIO-2875&quot; class=&quot;jira-issue-macro-key issue-link&quot;  title=&quot;SPIKE: how to distribute configuration through &amp;quot;multiple&amp;quot; interfaces&quot; &gt;
            &lt;img class=&quot;icon&quot; src=&quot;https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium&quot; /&gt;
            FOLIO-2875
        &lt;/a&gt;
                                                    &lt;span class=&quot;aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf&quot;&gt;Closed&lt;/span&gt;
            &lt;/span&gt;
 we want to investigate options other than the multiple interface.  &lt;/p&gt;

&lt;p&gt;Provide a way for modules to implement a common interface, with some easy way to tell OKAPI which one we want to call.&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;Requirements&quot;&gt;&lt;/a&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;Should not require use of additional X-Okapi-* headers&lt;/li&gt;
	&lt;li&gt;Must be able to depend on the interface&lt;/li&gt;
	&lt;li&gt;It&apos;s use should be Optional&lt;/li&gt;
	&lt;li&gt;Clients should not be required to know/determine the module Id in order to call a specific implementation of the interface.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="82034">FOLIO-3105</key>
            <summary>SPIKE:  Investigate OKAPI extensions to accommodate things like distributed configuration</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10001" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p2.svg">P2</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5cf6c546b87c300f36eb7b9a">Craig McNally</assignee>
                                                                <reporter accountid="5cf6c546b87c300f36eb7b9a">Craig McNally</reporter>
                                    <labels>
                            <label>R2</label>
                            <label>platform-core</label>
                    </labels>
                <created>Wed, 7 Apr 2021 13:35:32 +0000</created>
                <updated>Wed, 21 Jul 2021 06:47:45 +0000</updated>
                            <resolved>Mon, 19 Apr 2021 13:08:42 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                <comments>
                                                            <comment id="197071" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Wed, 7 Apr 2021 14:22:49 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5cf6c546b87c300f36eb7b9a&quot; class=&quot;user-hover&quot; rel=&quot;5cf6c546b87c300f36eb7b9a&quot; data-account-id=&quot;5cf6c546b87c300f36eb7b9a&quot; accountid=&quot;5cf6c546b87c300f36eb7b9a&quot; rel=&quot;noreferrer&quot;&gt;Craig McNally&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f8314dfbdef80006f6f572d&quot; class=&quot;user-hover&quot; rel=&quot;5f8314dfbdef80006f6f572d&quot; data-account-id=&quot;5f8314dfbdef80006f6f572d&quot; accountid=&quot;5f8314dfbdef80006f6f572d&quot; rel=&quot;noreferrer&quot;&gt;Adam Dickmeiss&lt;/a&gt; I was thinking about something like a new parameter called &quot;namespace&quot; that would allow is to implement a regular interface by more than one module. Example:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
  &quot;id&quot;: &quot;mod-hello-foo-1.0.0&quot;,
  &quot;name&quot;: &quot;Hello foo module&quot;,
  &quot;provides&quot;: [{
    &quot;id&quot;: &quot;configuration&quot;,
    &quot;version&quot;: &quot;1.0&quot;,
    &quot;namespace&quot;: &quot;foo&quot;
    &quot;handlers&quot;: [{
      &quot;methods&quot;: [
        &quot;GET&quot;
      ],
      &quot;pathPattern&quot;: &quot;/config&quot;,
      &quot;permissionsRequired&quot;: [&quot;foo.config&quot;]
    }]
  }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and &lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;{
  &quot;id&quot;: &quot;mod-hello-bar-1.0.0&quot;,
  &quot;name&quot;: &quot;Hello bar module&quot;,
  &quot;provides&quot;: [{
    &quot;id&quot;: &quot;config&quot;,
   &quot;namespace&quot;: &quot;bar&quot; 
    &quot;version&quot;: &quot;1.0&quot;,
    &quot;handlers&quot;: [{
      &quot;methods&quot;: [
        &quot;GET&quot;
      ],
      &quot;pathPattern&quot;: &quot;/config&quot;,
      &quot;permissionsRequired&quot;: [&quot;bar.config&quot;]
    }]
  }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;Okapi then would mount the endpoint with an additional path prefix that takes the value of &quot;namespace&quot;:&lt;/p&gt;

&lt;p&gt;/foo/config/&lt;br/&gt;
/bar/config/&lt;/p&gt;

&lt;p&gt;Additionally on the &quot;requires&quot; end Okapi would allow to depend on an interface in a specific namespace, like so:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;  &quot;requires&quot;: [
    {
      &quot;id&quot;: &quot;config&quot;,
      &quot;version&quot;: &quot;1.0&quot;
      &quot;namespace&quot;: &quot;foo&quot;
    }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All (exiting) implementations that don&apos;t specify an explicit namespace would be considered in a &quot;:default&quot; namespace.&lt;/p&gt;
</comment>
                                                            <comment id="197075" author="5f8314dfbdef80006f6f572d" created="Wed, 7 Apr 2021 15:57:16 +0000"  >&lt;p&gt;Looks good to me.. I would have suggested to reuse the &lt;tt&gt;scope&lt;/tt&gt; for this.. But perhaps it&apos;s just better to add a new property (the scope was an array as well !). We could be more explicit with the path patterns.. eg&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-json&quot;&gt;
{
  &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;mod-hello-foo-1.0.0&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;Hello foo module&quot;&lt;/span&gt;,
  &lt;span class=&quot;code-quote&quot;&gt;&quot;provides&quot;&lt;/span&gt;: [{
    &lt;span class=&quot;code-quote&quot;&gt;&quot;id&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;configuration&quot;&lt;/span&gt;,
    &lt;span class=&quot;code-quote&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;1.0&quot;&lt;/span&gt;,
    &lt;span class=&quot;code-quote&quot;&gt;&quot;namespace&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;
    &lt;span class=&quot;code-quote&quot;&gt;&quot;handlers&quot;&lt;/span&gt;: [{
      &lt;span class=&quot;code-quote&quot;&gt;&quot;methods&quot;&lt;/span&gt;: [
        &lt;span class=&quot;code-quote&quot;&gt;&quot;GET&quot;&lt;/span&gt;
      ],
      &lt;span class=&quot;code-quote&quot;&gt;&quot;pathPattern&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/{namespace}/config&quot;&lt;/span&gt;,
      &lt;span class=&quot;code-quote&quot;&gt;&quot;permissionsRequired&quot;&lt;/span&gt;: [&lt;span class=&quot;code-quote&quot;&gt;&quot;foo.config&quot;&lt;/span&gt;]
    }]
  }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;or even even:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-json&quot;&gt;
   &lt;span class=&quot;code-quote&quot;&gt;&quot;pathPattern&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/{namespace}/{version}/config&quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;if you want the interface version to be part of it too .. or&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-json&quot;&gt;
   &lt;span class=&quot;code-quote&quot;&gt;&quot;pathPattern&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;/{namespace}/{version}/{id}&quot;&lt;/span&gt;,
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                                                            <comment id="197079" author="5f8314dfbdef80006f6f572d" created="Wed, 7 Apr 2021 15:59:09 +0000"  >&lt;p&gt;Jakub&apos;s suggestion would be a P3 in effort, I reckon. So this could be delivered for at least one module to use for P2 (like a PoC).&lt;/p&gt;</comment>
                                                            <comment id="197083" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Thu, 8 Apr 2021 10:55:28 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f8314dfbdef80006f6f572d&quot; class=&quot;user-hover&quot; rel=&quot;5f8314dfbdef80006f6f572d&quot; data-account-id=&quot;5f8314dfbdef80006f6f572d&quot; accountid=&quot;5f8314dfbdef80006f6f572d&quot; rel=&quot;noreferrer&quot;&gt;Adam Dickmeiss&lt;/a&gt; if we re-use &apos;scope&apos; for this are we going to have a problem ensuring that only one implementation of a given interface can exist per scope? If not, then I don&apos;t see a problem. Though I don&apos;t see much value in being able to specify multiple &apos;scope&apos; values.&lt;/p&gt;

&lt;p&gt;Regarding making the path more &apos;explicit&apos; &amp;#8211; I am not sure it&apos;s a good idea. I am concerned that it would make it harder for the client/UI code to call the ednpoints. How would they know how to supply the &apos;scope&apos; in the request? I think we should have a &quot;fixed&quot; calling convention for this that is not configurable. We could make the path component a bit more special (similar to the &lt;tt&gt;/&amp;#95;/invoke&lt;/tt&gt; mechanism) e.g &lt;tt&gt;/&amp;#95;/scope/bar/...&lt;/tt&gt;.&lt;/p&gt;</comment>
                                                            <comment id="197087" author="5cf6c546b87c300f36eb7b9a" created="Mon, 12 Apr 2021 13:59:22 +0000"  >&lt;blockquote&gt;&lt;p&gt;Jakub&apos;s suggestion would be a P3 in effort, I reckon. So this could be delivered for at least one module to use for P2 (like a PoC).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5f8314dfbdef80006f6f572d&quot; class=&quot;user-hover&quot; rel=&quot;5f8314dfbdef80006f6f572d&quot; data-account-id=&quot;5f8314dfbdef80006f6f572d&quot; accountid=&quot;5f8314dfbdef80006f6f572d&quot; rel=&quot;noreferrer&quot;&gt;Adam Dickmeiss&lt;/a&gt; can you please clarify what you mean by a P3 in effort?&lt;/p&gt;</comment>
                                                            <comment id="197089" author="5cf6c546b87c300f36eb7b9a" created="Mon, 12 Apr 2021 15:26:50 +0000"  >&lt;p&gt;See &lt;a href=&quot;https://folio-org.atlassian.net/wiki/display/DD/Distributed+Configuration+via+Namespace&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://folio-org.atlassian.net/wiki/display/DD/Distributed+Configuration+via+Namespace&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79718">FOLIO-3121</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="35764">FOLSPRINGS-18</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="52877">OKAPI-1008</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="56691">RMB-827</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="27236">STSMACOM-499</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="11809">UXPROD-3018</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="81943">FOLIO-2875</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10144"><![CDATA[Core: Platform]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10063" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>PO Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i02k28:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10046" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Release</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10040"><![CDATA[R2 2021]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1427">CP: sprint 112</customfieldvalue>
    <customfieldvalue id="1861">CP: sprint 111</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 7 Apr 2021 14:22:49 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>