In 2019 the HCL Labs reimagined how a REST API for Domino should look like. The initial prototype was shared with selected customers and partner. Based on the feedback, Project KEEP will ship together with Domino.
KEEP allows applications to interact with Domino servers using simple HTTP calls directly from a browser, desktop or mobile app, or with a application server in the middle. To make this API accessible to a large audience open standards like OpenAPI or JWT were chosen over propriety implementations.
This session will introduce KEEP and the design principles and use cases. Data security and ease of use will be highlighted. Warm up your Postman clients and curl command lines and follow along!
The presenters for this session will be Stephan Wissel and Paul Withers from HCL.
2. AGENDA
โข Welcome โ Howard Greenberg and Graham Acres
โข Keep โ Paul Withers and Stephan Wissel from HCL
โข Q and A
3. THANKS TO THE OPENNTF SPONSORS
โข HCL made a significant contribution to help our
organization
โข Funds these webinars!
โข Contests like Hackathons
โข Running the organization
โข Prominic donates all IT related services
โข Cloud Hosting for OpenNTF
โข Infrastructure management for HCL Domino and Atlassian
Servers
โข System Administration for day-to-day operation
4. THIS IS OUR COMMUNITY
โข Join us and get involved!
โข We are all volunteers
โข No effort is too small
โข If your idea is bigger than you can do on your own, we
can connect you to a team to work on it
โข Test or help or modify an existing project
โข Write guides or documentation
โข Add reviews on projects / stars on Snippets
5. AUGUST WEBINAR
โข Git and GitHub Explained with Jesse
Gallagher and Paul Withers on Aug. 19th
โข Demystify git
โข Explain Branching
โข Show what makes a high quality repository
โข How to take advantage of GitHubโs broad functionality
โข Get that coveted "Verified" badge
โข Go from source control zero to GitHub hero!
โข Register at
https://www.openntf.org/webinars
6. Project KEEP โ OpenNTF July 2021
Project Keep
and Why You Would Want It
Paul S. Withers, HCL
Stephan H. Wissel, HCL
7. Project KEEP โ OpenNTF July 2021
โข Beta Early Access
โข Art of the possible
โข Feedback appreciated
โข Q: Does it [insert feature]?
โข A: No
(But weโll put it in the backlog)
HCL Labs v1 - availablenow
v2 โ 31 July 2021
โฆ
GA -> with 12.0.1
8. Project KEEP โ OpenNTF July 2021
What do developers want?
Standards, Choice & Familiarity
9. Project KEEP โ OpenNTF July 2021
Brace for 500 slides to follow
DEMO
10. Project KEEP โ OpenNTF July 2021
Architecture
Linux &
Windows
HCL sponsored
Redhat
OpenSource
OpenAPI driven
Foundation for
OpenClient
11. Project KEEP โ OpenNTF July 2021
โข Built by developers, for developers โ Domino and non-Domino
โข API First โ contract-driven development using OpenAPI 3.0
โข Secure by default
โข Web admin GUI
โข Dataโฆbut also design and admin
โข Extensible architecture
โข Low barrier to entry
โ Windows, Mac and Linux; Domino and Notes Client
โ Host static web apps (e.g. ReactJS, Angular)
โข APIs for: Data, Design, PIM, Admin
โข PIM -> follow the JMap data model
Architectural Decisions
Foundation for
OpenClient
23. Project KEEP โ OpenNTF July 2021
โ No Reader access? Youโre not getting in
โ No Depositor / Author access?
You canโt create
โ No Author / Editor access?
You canโt update
โ No Delete privilege?
You canโt delete
Form Access Modes refine,
they donโt override
ACL and more
25. Project KEEP โ OpenNTF July 2021
โข Keep is driven by OpenAPI
โข Keep Database defines what is available
โข If we could cross-reference would it be possibleโฆ
โฆto generate a โKeep Database-specificโ
OpenAPI spec for consumers?...
โฆwhich could be used in, say, Node-RED?
Consuming KEEP
26. Project KEEP โ OpenNTF July 2021
[{"id":"5dd0bc48.dc80b4","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"29b38c4f.28ccf4","type":"openApi-
red","z":"5dd0bc48.dc80b4","name":"","openApiUrl":"http://localhost:8880/api/v1/openapi?db=demo","api":"authentication","operation":"authLogin","operationData":{"name":"Get JWT
Session"},"errorHandling":"throw exception","parameters":{" Request Body":{"name":"Request Body","in":"","required":true,"value":"{"password":"password","username":"John
Doe"}","isActive":true,"inputType":"json"}},"contentType":"application/json","outputs":1,"x":290,"y":140,"wires":[["508f60e3.7e1268"]]},{"id":"f0962063.ebf968","type":"inject","z":"5dd0bc48.dc80b4","name
":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":140,"wires":[["29b38c4f.28ccf4"]]},{"id":"bef884d1.bcee18","type":"catch","z":"5dd0bc48.
dc80b4","name":"","scope":null,"uncaught":false,"x":380,"y":60,"wires":[["43b3784.e00d588"]]},{"id":"43b3784.e00d588","type":"debug","z":"5dd0bc48.dc80b4","name":"","active":true,"tosidebar":true,"console
":false,"tostatus":false,"complete":"true","targetType":"full","x":520,"y":60,"wires":[]},{"id":"508f60e3.7e1268","type":"function","z":"5dd0bc48.dc80b4","name":"Store bearer","func":"if
(msg.payload.status === 200) {n flow.set('keepBearer',msg.payload.body.bearer);n msg.payload = 'We have a bearer!';n} else {n msg.payload = msg.payload.statusText + ': ' +
msg.payload.text;n}nreturn
msg;","outputs":1,"noerr":0,"x":490,"y":140,"wires":[["f93daa2a.68404"]]},{"id":"f93daa2a.68404","type":"debug","z":"5dd0bc48.dc80b4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":fa
lse,"complete":"true","targetType":"full","x":640,"y":140,"wires":[]},{"id":"9dbc9ed4.ad934","type":"openApi-
red","z":"5dd0bc48.dc80b4","name":"","openApiUrl":"http://localhost:8880/api/v1/openapi?db=todo","api":"data","operation":"fetchViewEntries","operationData":{"name":"Pulls in view
data"},"errorHandling":"","parameters":{"query db":{"name":"db","in":"query","required":true,"value":"todo","isActive":true,"inputType":""},"query
count":{"name":"count","in":"query","value":"","isActive":false,"inputType":"num"},"path name":{"name":"name","in":"path","required":true,"value":"todosView","isActive":true,"inputType":""},"query
scope":{"name":"scope","in":"query","required":false,"value":"","isActive":false,"inputType":""},"query start":{"name":"start","in":"query","value":"","isActive":false,"inputType":"num"},"query
categories":{"name":"categories","in":"query","value":"","isActive":false,"inputType":"str"},"query
documents":{"name":"documents","in":"query","value":"true","isActive":false,"inputType":"bool"}},"contentType":"","schema":"","outputs":1,"x":430,"y":220,"wires":[["46a1d676.f12dd8"]]},{"id":"71d11957.297
b68","type":"inject","z":"5dd0bc48.dc80b4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":220,"wires":[["e684a3ba.17be28"]]},{"id"
:"e684a3ba.17be28","type":"change","z":"5dd0bc48.dc80b4","name":"Set
Bearer","rules":[{"t":"set","p":"openApiToken","pt":"msg","to":"keepBearer","tot":"flow"}],"action":"","property":"","from":"","to":"","reg ":false,"x":250,"y":220,"wires":[["9dbc9ed4.ad934"]]},{"id":"a6fb
36df.4b06e8","type":"inject","z":"5dd0bc48.dc80b4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":300,"wires":[["474b1273.ca6b14"]
]},{"id":"474b1273.ca6b14","type":"change","z":"5dd0bc48.dc80b4","name":"Set
Bearer","rules":[{"t":"set","p":"openApiToken","pt":"msg","to":"keepBearer","tot":"flow"}],"action":"","property":"","from":"","to":"","reg ":false,"x":250,"y":300,"wires":[["7bff1bae.e4b6c4"]]},{"id":"7bf
f1bae.e4b6c4","type":"openApi-red","z":"5dd0bc48.dc80b4","name":"","openApiUrl":"http://localhost:8880/api/v1/openapi?db=todo","api":"data","operation":"createDocument","operationData":{"name":"Create a
new document"},"errorHandling":"","parameters":{"query db":{"name":"db","in":"query","required":true,"value":"todo","isActive":true,"inputType":""},"query
parentunid":{"name":"parentunid","in":"query","value":"","isActive":false,"inputType":"str"}," Request Body":{"
name":"Request
Body","in":"","required":true,"value":"{"Form":"todo","description":"Check processing from Node-RED","duedate":"2020-10-05T17:10:07Z","name":"Create ToDo from Node-
RED","priority":"low"}","isActive":true,"inputType":"json"}},"contentType":"application/json","schema":"","outputs":1,"x":450,"y":300,"wires":[["46a1d676.f12dd8"]]},{"id":"fc3aa8b4.8334","type":"inje
ct","z":"5dd0bc48.dc80b4","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":400,"wires":[["90b0afe2.a6844"]]},{"id":"95520369.9edbc8"
,"type":"openApi-red","z":"5dd0bc48.dc80b4","name":"","openApiUrl":"http://localhost:8880/api/v1/openapi?db=todo","api":"data","operation":"updateDocument","operationData":{"
name":"Perform an update on
the document at the relevant mode"},"errorHandling":"","parameters":{"query parentunid":{"name":"parentunid","in":"query","value":"","isActive":false,"inputType":"str"},"query
db":{"name":"db","in":"query","required":true,"value":"todo","isActive":true,"inputType":""},"path mode":{"name":"mode","in":"p ath","required":true,"value":"complete","isActive":true,"inputType":""},"path
unid":{"name":"unid","in":"path","required":true,"value":"0DABAA1E73F497C2802585E0003E5F3D","isActive":true,"inputType":"str"}," Request Schema":{"name":"Request
Schema","in":"","required":true,"value":"Root type for todo-complete Requests","isActive":true,"inputType":""}," Request Body":{"name":"Request
Body","in":"","required":true,"value":"{"Form":"todo","completed":"true"}","isActive":true,"inputType":"json"}},"contentType":"application/json","schema":"Root type for todo-complete
Requests","outputs":1,"x":550,"y":400,"wires":[["46a1d676.f12dd8"]]},{"id":"90b0afe2.a6844","type":"change","z":"5dd0bc48.dc80b4","name":"Set
Bearer","rules":[{"t":"set","p":"openApiToken","pt":"msg","to":"keepBearer","tot":"flow"}],"action":"","property":"","from":"","to":"","reg ":false,"x":250,"y":400,"wires":[["95520369.9edbc8"]]},{"id":"46a
1d676.f12dd8","type":"debug","z":"5dd0bc48.dc80b4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":720,"y":240,"wires":[]}]
You said NodeRED? - easy
28. Project KEEP โ OpenNTF July 2021
โข DXL gives you raw design information
โข Domino developers interact with design elements
โข Non-Domino developers donโt understand DXL
โข But our target audience understands JSON
โข /design?db=keepdb โ Forms, Agents and Views as JSON
โข /design/{designtype}?db=keepdb โ All of design type as JSON
โข /design/{designtype}/{designname}?db=keepdb โ specific design element
Beyond Data
Forms, Agents, Views
29. Project KEEP โ OpenNTF July 2021
CAVEAT: subject to DXL limitations, see
https://domino-ideas.hcltechsw.com/ideas/IDEAAD-I-92
Beyond Data
Read Access Is Nice, Butโฆ
33. Project KEEP โ OpenNTF July 2021
โข Global business actions (e.g. Workflow)
โข Custom REST API gateways
โข Pub Sub endpoints
โข Combine REST access to other stuff with Domino
โข Experimental APIs*
โข World Domination
Extensibility (Planned)
* Sit back and watch
34. Project KEEP โ OpenNTF July 2021
โข Build you OpenAPI spec
โข Create the Keep Extension jar
โข Add the configuration
โข Have fun!
Beyond The Core
36. Project KEEP โ OpenNTF July 2021
โข OData = Open Data Protocol
โข Salesforce can consume & update OData
โข Excel (Windows) can consume OData*
โข SAP can consume & update OData
โข Access is currently basic auth
Beyond The Web Application
Click on card, copy the
URL, use in Excel etc.
* read/write with CDATA plugin
39. Project KEEP โ OpenNTF July 2021
โข Download & try it
โข Read the documentation (includes download link)
https://opensource.hcltechsw.com/domino-keep-docs/
โข Try the tutorials
https://opensource.hcltechsw.com/domino-keep-docs/
โข Build your own solutions
โข Give us feedback
https://slackin.openntf.org/
https://registration.hclpartnerconnect.com/dominoearlyaccessforum.nsf
Call to action
Sample repository
coming soon
40. ASKING QUESTIONS
โข First Question โ Will this be recorded?
โข Yes, view on YouTube!!!
โข https://www.youtube.com/user/OpenNTF
โข Use the Questions Pane in GoToWebinar
โข We will get to your questions at the end of
the webinar
โข The speakers will respond to your questions
verbally
โข (not in the Questions pane)
โข Please keep all questions related to the
topics that our speakers are discussing!!!
โข Unrelated Question => post at:
โข http://openntf.slack.com/
41. QUESTIONS?
Use the GoToWebinar Questions Pane
Please keep all questions related to the
topics that our speakers are discussing!!!
Unrelated Question => post at:
http://openntf.slack.com/