{"action":"created","issue":{"url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/issues/50","repository_url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x","labels_url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/issues/50/labels{/name}","comments_url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/issues/50/comments","events_url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/issues/50/events","html_url":"https://github.com/fcrepo4-labs/fcrepo-api-x/issues/50","id":183510435,"number":50,"title":"Create OPTIONS extension loader","user":{"login":"birkland","id":517881,"avatar_url":"https://avatars.githubusercontent.com/u/517881?v=3","gravatar_id":"","url":"https://api.github.com/users/birkland","html_url":"https://github.com/birkland","followers_url":"https://api.github.com/users/birkland/followers","following_url":"https://api.github.com/users/birkland/following{/other_user}","gists_url":"https://api.github.com/users/birkland/gists{/gist_id}","starred_url":"https://api.github.com/users/birkland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/birkland/subscriptions","organizations_url":"https://api.github.com/users/birkland/orgs","repos_url":"https://api.github.com/users/birkland/repos","events_url":"https://api.github.com/users/birkland/events{/privacy}","received_events_url":"https://api.github.com/users/birkland/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/milestones/1","html_url":"https://github.com/fcrepo4-labs/fcrepo-api-x/milestones/Milestone%20+%20Demo%201","labels_url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/milestones/1/labels","id":2075358,"number":1,"title":"Milestone + Demo 1","description":"Functionality described in;\r\nhttps://docs.google.com/document/d/10Zv_IpCwItMEuomB6Xpoy5d3x2914c6KzP9s5IcLzHk/edit\r\n","creator":{"login":"birkland","id":517881,"avatar_url":"https://avatars.githubusercontent.com/u/517881?v=3","gravatar_id":"","url":"https://api.github.com/users/birkland","html_url":"https://github.com/birkland","followers_url":"https://api.github.com/users/birkland/followers","following_url":"https://api.github.com/users/birkland/following{/other_user}","gists_url":"https://api.github.com/users/birkland/gists{/gist_id}","starred_url":"https://api.github.com/users/birkland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/birkland/subscriptions","organizations_url":"https://api.github.com/users/birkland/orgs","repos_url":"https://api.github.com/users/birkland/repos","events_url":"https://api.github.com/users/birkland/events{/privacy}","received_events_url":"https://api.github.com/users/birkland/received_events","type":"User","site_admin":false},"open_issues":9,"closed_issues":0,"state":"open","created_at":"2016-10-17T19:09:42Z","updated_at":"2016-10-17T20:00:20Z","due_on":"2016-10-24T00:00:00Z","closed_at":null},"comments":0,"created_at":"2016-10-17T19:51:42Z","updated_at":"2016-10-19T14:55:56Z","closed_at":null,"body":"Create simple mechanism (service?) that loads extension into API-X based on URI of an Amherst service.  An extension definition document is present in the body of `OPTIONS` requests\r\n* Gets extension definition via `OPTIONS` to the Amherst service, registers extension and service in API-X"},"comment":{"url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/issues/comments/254838199","html_url":"https://github.com/fcrepo4-labs/fcrepo-api-x/issues/50#issuecomment-254838199","issue_url":"https://api.github.com/repos/fcrepo4-labs/fcrepo-api-x/issues/50","id":254838199,"user":{"login":"birkland","id":517881,"avatar_url":"https://avatars.githubusercontent.com/u/517881?v=3","gravatar_id":"","url":"https://api.github.com/users/birkland","html_url":"https://github.com/birkland","followers_url":"https://api.github.com/users/birkland/followers","following_url":"https://api.github.com/users/birkland/following{/other_user}","gists_url":"https://api.github.com/users/birkland/gists{/gist_id}","starred_url":"https://api.github.com/users/birkland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/birkland/subscriptions","organizations_url":"https://api.github.com/users/birkland/orgs","repos_url":"https://api.github.com/users/birkland/repos","events_url":"https://api.github.com/users/birkland/events{/privacy}","received_events_url":"https://api.github.com/users/birkland/received_events","type":"User","site_admin":false},"created_at":"2016-10-19T14:55:56Z","updated_at":"2016-10-19T14:55:56Z","body":"Some initial thoughts:\r\n\r\n1. A `from(“timer:register?repeatCount=1”)` can be added to a service's CamelContext to push service endpoint URIs to the options loader. (note:  This approach is only relevant for services that use camel, which Amherst's does)\r\n    - This route `POST`s the service URI to an api-x extension loader service endpoint\r\n2. Extension loader service receives uri in post\r\n    -  Accepts `text/plain`,  or `application/x-www-form-urlencoded`\r\n    -  It then OPTIONS the uri, which contains extension body\r\n    - Creates LDP service resource in registry if it does not exist\r\n        - Dereferences any service URIs (e.g. `<extension> apix:consumesService <service>`)\r\n     - Creates LDP service instance registry resource, if it doesn't exist\r\n     - Deals with service instance resource; takes the approach of 1:1 mapping between LDP service instance resources and service endpoints\r\n        - It's presumed that there's only one `<extension> apix:consumesService <service>`, and that the service URI posted to the service is an instance of it\r\n        - If service instance/endpoint not it does not exist in registry, Creates service instance object, return URI to that object as 201 Created URI\r\n        - If it service instance/endpoint exist, return 303 to the service instance resource URI\r\n    - Ingests the extension definition into the extension registry, if it does not exist\r\n* If a browser does a GET to the extension loader service URI, it can return a simple html form for typing in the service URI to load"}}
{"actor":{"display_login":"birkland"}}