{"id":118,"date":"2014-06-22T19:48:08","date_gmt":"2014-06-23T02:48:08","guid":{"rendered":"http:\/\/blogs.callutheran.edu\/jpdillon\/?p=118"},"modified":"2014-06-27T16:09:13","modified_gmt":"2014-06-27T23:09:13","slug":"implementing-domino-web-services","status":"publish","type":"post","link":"https:\/\/blogs.callutheran.edu\/jpdillon\/2014\/06\/22\/implementing-domino-web-services\/","title":{"rendered":"Implementing Domino Web Services"},"content":{"rendered":"<p>Yes, I&#8217;m late to the party, however&#8230;..<\/p>\n<p>I&#8217;m finally beginning to create Domino Web Service providers.\u00a0 (If you&#8217;re not family with the IBM Lotus Notes\/Domino environment, you need read no further.)<\/p>\n<p>I have located several good reference pages by Julian Rubichaux, but still felt like there was some information missing that I couldn&#8217;t seem to locate, so I began a series of experiments.<\/p>\n<p>As a result, I&#8217;ve begun compiling a summary of thoughts and standards for my environment, some of which I&#8217;ll mention here.<\/p>\n<p><strong>Don&#8217;t put any code in your web service.<\/strong> Instead, have your web service class inherit from a class defined in a script library. This class in turn inherits many standard elements from a base class in another script library.\u00a0 While it means you have to go through a couple of extra steps to refresh the service, it means you are able to employ code reuse on a massive scale.\u00a0 It also means you get better &#8220;Intellisense&#8221; capability (or whatever IBM calls it).<\/p>\n<p><strong>Define standard classes for your common return values,<\/strong> especially arrays, lists, date\/time things, and NotesDocuments, and include them in the base class mentioned a moment ago.<\/p>\n<p><strong>Develop and use a standard error handling approach for all errors.<\/strong> In my case, I leverage Julian&#8217;s OpenLog.NSF tool for capturing errors internally, but return a generic error to the web service so as to hide any details about our underlying data structures. I have augmented Julian&#8217;s code so that it generates a &#8220;cascading log&#8221; entry, similar to a stack trace, that shows the call history of the problem area. This helps me debug the problem in my code.<\/p>\n<p><strong>Give serious thought to security.<\/strong> I&#8217;m still trying to figure out how to pass Domino credentials into a web service, but I&#8217;ve come up with a fairly robust work-around in the meantime. Perhaps I&#8217;ll describe it another time, but since it relates to security, maybe not right away!<\/p>\n<p><strong><\/strong>There&#8217;s a lot more that I still need to explore and develop.\u00a0 I&#8217;ll update this entry as time allows.<\/p>\n<p><em>Note: my environment uses Domino version 8.5.3 but I think these guidelines are generic enough that you can use them from version 7.0.1 on.<\/em><\/p>\n<p><strong>Recommended free tool<\/strong> to use when testing Web Services: <strong>SoapUI.<\/strong>\u00a0 It saves you from having to debug two halves of the web service puzzle at the same time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yes, I&#8217;m late to the party, however&#8230;.. I&#8217;m finally beginning to create Domino Web Service providers.\u00a0 (If you&#8217;re not family with the IBM Lotus Notes\/Domino environment, you need read no further.) I have located several good reference pages by Julian Rubichaux, but still felt like there was some information missing that I couldn&#8217;t seem to [&hellip;]<\/p>\n","protected":false},"author":10785,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-118","post","type-post","status-publish","format-standard","hentry","category-ibm-notes-lotus-notes"],"_links":{"self":[{"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/posts\/118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/users\/10785"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/comments?post=118"}],"version-history":[{"count":6,"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/posts\/118\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/posts\/118\/revisions\/120"}],"wp:attachment":[{"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/media?parent=118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/categories?post=118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.callutheran.edu\/jpdillon\/wp-json\/wp\/v2\/tags?post=118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}