Skip to end of banner
Go to start of banner

Distributed Configuration via Namespace

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Overview

In contrast to the "Multple Interface" approach, the idea here is to use standard interfaces and extend OKAPI to support the concept of a namespace to act as the discriminator.  

Namespace-scoped Interface Support

The changes required here include generic support for namespace-scoped interfaces:

Module Descriptor

  • Add a new field "namespace" - this serves as the discriminator in the case when an interface which have already been defined with the same name.
    • Optional
    • String
  • Applies to both the provides and requires sections of the Module Descriptor

Example (Provider)

{
  "id": "mod-hello-foo-1.0.0",
  "name": "Hello foo module",
  "provides": [{
    "id": "distributed_configuration",
    "version": "1.0",
    "namespace": "foo",
    "handlers": [{
      "methods": [ "GET" ],
      "pathPattern": "/configurations/entries",
      "permissionsRequired": [ "foo.configuration.entries.collection.get" ]
    },
    {
      "methods": [ "GET" ],
      "pathPattern": "/configurations/entries/{id}",
      "permissionsRequired": [ "foo.configuration.entries.item.get" ]
    },
    {
      "methods": [ "POST" ],
      "pathPattern": "/configurations/entries",
      "permissionsRequired": [ "foo.configuration.entries.item.post" ]
    },
    {
      "methods": [ "PUT" ],
      "pathPattern": "/configurations/entries/{id}",
      "permissionsRequired": [ "foo.configuration.entries.item.put" ]
    },
    {
      "methods": [ "DELETE" ],
      "pathPattern": "/configurations/entries/{id}",
      "permissionsRequired": [ "foo.configuration.entries.item.delete" ]
    }]
  }],
  "requires": [],
  "launchDescriptor": {
    "exec": "node hello_foo.js"
  }
}

Example (Consumer)

"requires": [
  {
    "id": "distributed_configuration",
    "version": "1.0"
    "namespace": "foo"
  }
]

OKAPI

Distributed Configuration Support

The work required to implement the distributed_configuration (namespace-scoped) interface:

RAML/OpenAPI

At least one user story is needed in the OKAPI project to handle the following:

  • Create shared/common interface description for the distributed_configuration API.
    • Incorporate the namespace query arg or path prefix (depends on the approach we take - see above)
    • Should be easy to pull in and use by modules (like existing shared RAML traits, etc.)

raml-module-builder / folio-spring-base

  • Create default implementations of the distributed_configuration interface
    • Similar to what's currently provided by mod-configuration - probably just handles persistence, no fancy business logic required
    • Can be easily overridden if desired.  

Stripes Changes


Other Considerations

  1. Do we want/need to incorporate version into the discriminator too?  This is something that came up in the JIRA comments here.

JIRAs

  • UXPROD-3018 - Getting issue details... STATUS
  • FOLIO-3105 - Getting issue details... STATUS
  • FOLIO-2875 - Getting issue details... STATUS
  • At least one user story for the OKAPI and ModuleDescriptor work
  • One story for the RAML/OpenAPI work
  • One story for the RMB work
  • One story for the folio-spring-base work.
  • One story for stripes-smart-components work.
  • One story for a module to implement the distributed_configuration namespace-scoped interface using the functionality provided by RMB/FSB and OKAPI.
  • No labels