Presentation of the paper "Creating 3rd Generation Web APIs with Hydra" at the 22nd Internation World Wide Web Conference (WWW2013) in Rio de Janeiro, Brazil
The document discusses techniques for public libraries to better integrate their resources on the web through technologies like web services, deep linking, and OpenURL linking. It provides examples of how libraries can use these approaches to pull other sites' content and services into the library website, and push the library website and services out to other sites. This would allow library resources to be more discoverable and accessible to users across the web.
The document discusses various methods for accessing and consuming external data with jQuery including:
1) RESTful web services and consuming REST APIs with jQuery's AJAX methods by making GET and POST requests.
2) Common data formats for APIs like XML, JSON, and RSS and examples of each.
3) Consuming the Twitter REST API with jQuery to get user tweets, post new tweets, and search tweets.
4) Twitter's @Anywhere solution which makes it easy to add Twitter features like follow buttons and tweet widgets to applications.
5) Demonstrating the Facebook JavaScript SDK and APIs for features like login/logout and posting.
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
Slajdy z konferencji DevCrowd
Wszyscy znamy architekturę REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dlatego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też o tym jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
Come to discover what in the world are RESTFul services and what are its benefits over other API building technologies. We will cover the basics of HTTP representation protocols, RESTful routing, security, authentication and testing. We will then move to modeling RESTful resources via an open source tool called Relax; Restful Tools For Lazy Experts, and containerize it via docker.
Key Takeaways
What is REST
REST Best practices
REST Implementations
This slide show is from my presentation on what JSON and REST are. It aims to provide a number of talking points by comparing apples and oranges (JSON vs. XML and REST vs. web services).
Les Hazlewood, Stormpath co-founder and CTO and the Apache Shiro PMC Chair demonstrates how to design a beautiful REST + JSON API. Includes the principles of RESTful design, how REST differs from XML, tips for increasing adoption of your API, and security concerns.
Presentation video: https://www.youtube.com/watch?v=5WXYw4J4QOU
More info: http://www.stormpath.com/blog/designing-rest-json-apis
Further reading: http://www.stormpath.com/blog
Sign up for Stormpath: https://api.stormpath.com/register
Stormpath is a user management and authentication service for developers. By offloading user management and authentication to Stormpath, developers can bring applications to market faster, reduce development costs, and protect their users. Easy and secure, the flexible cloud service can manage millions of users with a scalable pricing model.
This document discusses best practices for creating RESTful APIs. It covers three main topics: representing resources with URLs and HTTP verbs, using the HTTP protocol machinery like status codes and caching, and linking resources together through hypermedia. URLs should represent resources, verbs should represent actions, and standard HTTP features like status codes and conditional requests should be used. Well-designed REST APIs represent application state through linked resources and relationships rather than embedding actions in URLs.
Presentation of the paper "Creating 3rd Generation Web APIs with Hydra" at the 22nd Internation World Wide Web Conference (WWW2013) in Rio de Janeiro, Brazil
The document discusses techniques for public libraries to better integrate their resources on the web through technologies like web services, deep linking, and OpenURL linking. It provides examples of how libraries can use these approaches to pull other sites' content and services into the library website, and push the library website and services out to other sites. This would allow library resources to be more discoverable and accessible to users across the web.
The document discusses various methods for accessing and consuming external data with jQuery including:
1) RESTful web services and consuming REST APIs with jQuery's AJAX methods by making GET and POST requests.
2) Common data formats for APIs like XML, JSON, and RSS and examples of each.
3) Consuming the Twitter REST API with jQuery to get user tweets, post new tweets, and search tweets.
4) Twitter's @Anywhere solution which makes it easy to add Twitter features like follow buttons and tweet widgets to applications.
5) Demonstrating the Facebook JavaScript SDK and APIs for features like login/logout and posting.
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
Slajdy z konferencji DevCrowd
Wszyscy znamy architekturę REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dlatego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też o tym jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
Come to discover what in the world are RESTFul services and what are its benefits over other API building technologies. We will cover the basics of HTTP representation protocols, RESTful routing, security, authentication and testing. We will then move to modeling RESTful resources via an open source tool called Relax; Restful Tools For Lazy Experts, and containerize it via docker.
Key Takeaways
What is REST
REST Best practices
REST Implementations
This slide show is from my presentation on what JSON and REST are. It aims to provide a number of talking points by comparing apples and oranges (JSON vs. XML and REST vs. web services).
Les Hazlewood, Stormpath co-founder and CTO and the Apache Shiro PMC Chair demonstrates how to design a beautiful REST + JSON API. Includes the principles of RESTful design, how REST differs from XML, tips for increasing adoption of your API, and security concerns.
Presentation video: https://www.youtube.com/watch?v=5WXYw4J4QOU
More info: http://www.stormpath.com/blog/designing-rest-json-apis
Further reading: http://www.stormpath.com/blog
Sign up for Stormpath: https://api.stormpath.com/register
Stormpath is a user management and authentication service for developers. By offloading user management and authentication to Stormpath, developers can bring applications to market faster, reduce development costs, and protect their users. Easy and secure, the flexible cloud service can manage millions of users with a scalable pricing model.
This document discusses best practices for creating RESTful APIs. It covers three main topics: representing resources with URLs and HTTP verbs, using the HTTP protocol machinery like status codes and caching, and linking resources together through hypermedia. URLs should represent resources, verbs should represent actions, and standard HTTP features like status codes and conditional requests should be used. Well-designed REST APIs represent application state through linked resources and relationships rather than embedding actions in URLs.
- REST (Representational State Transfer) uses HTTP requests to transfer representations of resources between clients and servers. The format of the representation is determined by the content-type header and the interaction with the resource is determined by the HTTP verb used.
- The four main HTTP verbs are GET, PUT, DELETE, and POST. GET retrieves a representation of the resource and is safe, while PUT, DELETE, and POST can modify the resource's state in atomic operations.
- Resources are abstract concepts acted upon by HTTP requests, while representations are the actual data transmitted in responses. The representation may or may not accurately reflect the resource's current state.
Building Beautiful REST APIs in ASP.NET CoreStormpath
Core 1.0 is the latest iteration of ASP.NET. What’s changed? Everything! Nate Barbettini, .NET Developer Evangelist at Stormpath, does a deep dive on how to build RESTful APIs the right way on top of ASP.NET Web API.
Best practices for RESTful web service designRamin Orujov
Ramin Orujov presents best practices for designing RESTful web services, covering fundamentals of REST, resource naming conventions, representations, HTTP methods, error handling, versioning, paging, searching and filtering, security, caching and scalability. The presentation provides guidelines for each of these areas and references additional resources for further information.
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...Codemotion
We live in a interconnected world, were every day new devices, systems, and applications are connected to share information or interact between them. Thus, the importance of designing systems prepared to offer their services and data to a wide range of customers, that could discover, navigate and use their API in a standard and easy way to be consumed. But designing a headless platform to be used easily through their services is not straightforward. In this talk we will go over the challenges that we've found in adding headless nature to our platform and the foundations and tools that we have
The document discusses REST (Representational State Transfer) and compares it to other architectural styles like WS-* and SOAP. REST is an architectural style that uses HTTP methods like GET, PUT, POST and DELETE to operate on resources identified by URIs. It emphasizes stateless communication and returning representations of resources in response to requests. Popular REST APIs and implementations include Google's GData and OpenSocial, as well as Amazon S3 and SimpleDB.
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
We all know the REST architectural style to define a good API for your applications. However, REST has its disadvantages and constraints. That’s why Facebook developed GraphQL as an alternative.
In my talk, I will present you some REST constraints and how GraphQL solves them. I will talk about how we implemented GraphQL in our application and why.
Get to know our successes… and failures from the first row.
At Stormpath we spent 18 months researching API design best practices. Join Les Hazlewood, Stormpath CTO and Apache Shiro Chair, as he explains how to design a secure REST API, the right way. He'll also hang out for a live Q&A session at the end.
Sign up for Stormpath: https://api.stormpath.com/register
More from Stormpath: http://www.stormpath.com/blog
Les will cover:
REST + JSON API Design
Base URL design tips
API Security
Versioning for APIs
API Resource Formatting
API Return Values and Content Negotiation
API References (Linking)
API Pagination, Parameters, & Errors
Method Overloading
Resource Expansion and Partial Responses
Error Handling
Multi-tenancy
The document discusses using JSON and RESTful APIs for database interaction on the web. It covers HTTP methods like GET, PUT, POST, and DELETE for CRUD operations. Various client-side and server-side frameworks that support this approach are also mentioned. Finally, it discusses additional JSON-based standards and techniques for querying, referencing, notifications, and security when using RESTful databases.
An API isn't stronger than its weakest link and what’s often ignored in the ongoing maintenance and development of an API is the constant effort required to provide great self-servicable error messages. What this means is that without great, user-friendly error messages, your API is not going to be great.
Just think about your first interaction with an API. How many failing requests have you sent before you have dug yourself through swathes of error messages and documentation to get to that one penultimate successful request making your heart sing and fists shaking in the air?
Great error messages make them not feel like errors, but like friendly guidance towards a working request. They should be detailed enough to let the developer fix whatever problem there is themselves, like a dialogue between a customer and a support technician.
This talk will give you ideas of how to handle errors and exceptions that occur in your application, be it with the incoming request, database failures or errors received from a 3rd party and how to serialize them into user friendly and actionable problem messages.
Slajdy z konferencji Confitura 2019.
Wszyscy znamy podejście REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dla tego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
Presentation on various definitions for JSON including JSON-RPC, JSPON, JSON Schema, JSONP and tools for working these definitions including Persevere client and server..
ICONUK 2015: How to Embrace Your XPages Plugin Super PowersSerdar Basegmez
ICONUK 2015 Development Track. September 21, 2015
Prezi version (Voice-over): https://prezi.com/4horih1hgqom/voiceover-how-to-embrace-your-xpages-plugin-super-powers-icon-uk-2015/
Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!Serdar Basegmez
The document discusses common mistakes made by XPages developers, including issues with component trees, view and page states, browser-server interaction, the <xp:repeat> component, dialogs, and custom controls. It provides explanations and examples to illustrate key concepts in XPages development and help avoid common problems.
BDD to the Bone: Using Behave and Selenium to Test-Drive Web ApplicationsPatrick Viafore
Talk about Behavior-driven Development, Behave, Selenium and Python
Project is found at https://github.com/pviafore/BddToTheBone
Presented at PyTennessee 2017
YouTube video -> https://youtu.be/H2FuJYlbzDg
Appium is an open source test automation framework for use with native, hybrid and mobile web apps. It drives iOS, Android, and Windows apps using the WebDriver protocol. Let’s talk more on Appium.
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good ServerSerdar Basegmez
This document summarizes the troubleshooting process used to identify and resolve a performance issue impacting a mission critical Domino database. Initial analysis found the database compact was not completing and the server was experiencing high swap space usage and memory pressure. Further investigation revealed several issues with the database design and scheduled tasks. A multi-step process was then used to optimize the operating system, Domino configuration, and address a problem with a custom application that was filling memory. Collaborative debugging between administrators and developers was able to replicate the issue and identify the specific code causing the performance problem.
Engage 2016: Back From the Dead: How Bad Code Kills a Good ServerSerdar Basegmez
This document outlines a presentation about troubleshooting performance issues on a Domino server. It describes how the presenters received a call about a mission-critical database running very slowly. They began gathering system information and analyzing logs and databases. They found issues like agents running at inappropriate times, compacting issues leaving databases in a suboptimal state, and scheduled tasks referring to nonexistent objects. The presenters worked to optimize the operating system, perform maintenance on Domino, and then used a scientific methodology to research, hypothesize, experiment, and prove the cause of poor application performance.
Selenium Tips & Tricks, presented at the Tel Aviv Selenium MeetupDave Haeffner
The document provides tips and strategies for using Selenium to write automated tests. It begins with an overview of Selenium and outlines a 10 step process to write successful tests. The steps include defining a test strategy, choosing a programming language, learning Selenium fundamentals, writing the first test, implementing page objects for maintainable code, making tests resilient to failures, adding cross-browser testing, creating an automated feedback loop through continuous integration, and finding additional information resources. The document emphasizes writing reusable, maintainable and resilient tests that can run across browsers to test an application.
The wild wild west of Selenium CapabilitiesAdi Ofri
Not all desired capabilities where born equal:
– Some were born in the world of open source, while others were born as vendor proprietary properties.
– Some are mandatory, and some are optional.
– Some are clear and deterministic, others are vague and require reading and experimentation.
– Some make it easy to change vendors without breaking a sweat, while some will lock you into a specific implementation.
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...COMAQA.BY
Мы вместе проговорить следующие вопросы
1. Запуск тестов в облаке: server-side VS client side execution
2. Парк устройств и поддерживаемые фреймворки в TestDroid, TestObject
3. Доступные действия и ограничения в работе с устройствами в облаке
4. Интеграция проекта на базе Appium-а используя client-side execution & API облачного сервиса
5. Интеграция с hockeyApp.
6. Как мы тестировали и что из этого получилось – личная история
- REST (Representational State Transfer) uses HTTP requests to transfer representations of resources between clients and servers. The format of the representation is determined by the content-type header and the interaction with the resource is determined by the HTTP verb used.
- The four main HTTP verbs are GET, PUT, DELETE, and POST. GET retrieves a representation of the resource and is safe, while PUT, DELETE, and POST can modify the resource's state in atomic operations.
- Resources are abstract concepts acted upon by HTTP requests, while representations are the actual data transmitted in responses. The representation may or may not accurately reflect the resource's current state.
Building Beautiful REST APIs in ASP.NET CoreStormpath
Core 1.0 is the latest iteration of ASP.NET. What’s changed? Everything! Nate Barbettini, .NET Developer Evangelist at Stormpath, does a deep dive on how to build RESTful APIs the right way on top of ASP.NET Web API.
Best practices for RESTful web service designRamin Orujov
Ramin Orujov presents best practices for designing RESTful web services, covering fundamentals of REST, resource naming conventions, representations, HTTP methods, error handling, versioning, paging, searching and filtering, security, caching and scalability. The presentation provides guidelines for each of these areas and references additional resources for further information.
David Gómez G. - Hypermedia APIs for headless platforms and Data Integration ...Codemotion
We live in a interconnected world, were every day new devices, systems, and applications are connected to share information or interact between them. Thus, the importance of designing systems prepared to offer their services and data to a wide range of customers, that could discover, navigate and use their API in a standard and easy way to be consumed. But designing a headless platform to be used easily through their services is not straightforward. In this talk we will go over the challenges that we've found in adding headless nature to our platform and the foundations and tools that we have
The document discusses REST (Representational State Transfer) and compares it to other architectural styles like WS-* and SOAP. REST is an architectural style that uses HTTP methods like GET, PUT, POST and DELETE to operate on resources identified by URIs. It emphasizes stateless communication and returning representations of resources in response to requests. Popular REST APIs and implementations include Google's GData and OpenSocial, as well as Amazon S3 and SimpleDB.
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
We all know the REST architectural style to define a good API for your applications. However, REST has its disadvantages and constraints. That’s why Facebook developed GraphQL as an alternative.
In my talk, I will present you some REST constraints and how GraphQL solves them. I will talk about how we implemented GraphQL in our application and why.
Get to know our successes… and failures from the first row.
At Stormpath we spent 18 months researching API design best practices. Join Les Hazlewood, Stormpath CTO and Apache Shiro Chair, as he explains how to design a secure REST API, the right way. He'll also hang out for a live Q&A session at the end.
Sign up for Stormpath: https://api.stormpath.com/register
More from Stormpath: http://www.stormpath.com/blog
Les will cover:
REST + JSON API Design
Base URL design tips
API Security
Versioning for APIs
API Resource Formatting
API Return Values and Content Negotiation
API References (Linking)
API Pagination, Parameters, & Errors
Method Overloading
Resource Expansion and Partial Responses
Error Handling
Multi-tenancy
The document discusses using JSON and RESTful APIs for database interaction on the web. It covers HTTP methods like GET, PUT, POST, and DELETE for CRUD operations. Various client-side and server-side frameworks that support this approach are also mentioned. Finally, it discusses additional JSON-based standards and techniques for querying, referencing, notifications, and security when using RESTful databases.
An API isn't stronger than its weakest link and what’s often ignored in the ongoing maintenance and development of an API is the constant effort required to provide great self-servicable error messages. What this means is that without great, user-friendly error messages, your API is not going to be great.
Just think about your first interaction with an API. How many failing requests have you sent before you have dug yourself through swathes of error messages and documentation to get to that one penultimate successful request making your heart sing and fists shaking in the air?
Great error messages make them not feel like errors, but like friendly guidance towards a working request. They should be detailed enough to let the developer fix whatever problem there is themselves, like a dialogue between a customer and a support technician.
This talk will give you ideas of how to handle errors and exceptions that occur in your application, be it with the incoming request, database failures or errors received from a 3rd party and how to serialize them into user friendly and actionable problem messages.
Slajdy z konferencji Confitura 2019.
Wszyscy znamy podejście REST do definiowania API naszych aplikacji. Jednak REST ma swoje wady i ograniczenia. To dla tego Facebook stworzył GraphQL jako alternatywę. W mojej prezentacji przedstawię ograniczenia RESTa i jak je rozwiązuje GraphQL. Pokażę składnię, zalety jak i wady. Będzie też jak zaimplementować GraphQL w Javie oraz co jeszcze warto o nim wiedzieć.
Presentation on various definitions for JSON including JSON-RPC, JSPON, JSON Schema, JSONP and tools for working these definitions including Persevere client and server..
ICONUK 2015: How to Embrace Your XPages Plugin Super PowersSerdar Basegmez
ICONUK 2015 Development Track. September 21, 2015
Prezi version (Voice-over): https://prezi.com/4horih1hgqom/voiceover-how-to-embrace-your-xpages-plugin-super-powers-icon-uk-2015/
Engage 2015 - 10 Mistakes You and Every XPages Developer Make. Yes, I said YOU!Serdar Basegmez
The document discusses common mistakes made by XPages developers, including issues with component trees, view and page states, browser-server interaction, the <xp:repeat> component, dialogs, and custom controls. It provides explanations and examples to illustrate key concepts in XPages development and help avoid common problems.
BDD to the Bone: Using Behave and Selenium to Test-Drive Web ApplicationsPatrick Viafore
Talk about Behavior-driven Development, Behave, Selenium and Python
Project is found at https://github.com/pviafore/BddToTheBone
Presented at PyTennessee 2017
YouTube video -> https://youtu.be/H2FuJYlbzDg
Appium is an open source test automation framework for use with native, hybrid and mobile web apps. It drives iOS, Android, and Windows apps using the WebDriver protocol. Let’s talk more on Appium.
ICONUK 2016: Back From the Dead: How Bad Code Kills a Good ServerSerdar Basegmez
This document summarizes the troubleshooting process used to identify and resolve a performance issue impacting a mission critical Domino database. Initial analysis found the database compact was not completing and the server was experiencing high swap space usage and memory pressure. Further investigation revealed several issues with the database design and scheduled tasks. A multi-step process was then used to optimize the operating system, Domino configuration, and address a problem with a custom application that was filling memory. Collaborative debugging between administrators and developers was able to replicate the issue and identify the specific code causing the performance problem.
Engage 2016: Back From the Dead: How Bad Code Kills a Good ServerSerdar Basegmez
This document outlines a presentation about troubleshooting performance issues on a Domino server. It describes how the presenters received a call about a mission-critical database running very slowly. They began gathering system information and analyzing logs and databases. They found issues like agents running at inappropriate times, compacting issues leaving databases in a suboptimal state, and scheduled tasks referring to nonexistent objects. The presenters worked to optimize the operating system, perform maintenance on Domino, and then used a scientific methodology to research, hypothesize, experiment, and prove the cause of poor application performance.
Selenium Tips & Tricks, presented at the Tel Aviv Selenium MeetupDave Haeffner
The document provides tips and strategies for using Selenium to write automated tests. It begins with an overview of Selenium and outlines a 10 step process to write successful tests. The steps include defining a test strategy, choosing a programming language, learning Selenium fundamentals, writing the first test, implementing page objects for maintainable code, making tests resilient to failures, adding cross-browser testing, creating an automated feedback loop through continuous integration, and finding additional information resources. The document emphasizes writing reusable, maintainable and resilient tests that can run across browsers to test an application.
The wild wild west of Selenium CapabilitiesAdi Ofri
Not all desired capabilities where born equal:
– Some were born in the world of open source, while others were born as vendor proprietary properties.
– Some are mandatory, and some are optional.
– Some are clear and deterministic, others are vague and require reading and experimentation.
– Some make it easy to change vendors without breaking a sweat, while some will lock you into a specific implementation.
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...COMAQA.BY
Мы вместе проговорить следующие вопросы
1. Запуск тестов в облаке: server-side VS client side execution
2. Парк устройств и поддерживаемые фреймворки в TestDroid, TestObject
3. Доступные действия и ограничения в работе с устройствами в облаке
4. Интеграция проекта на базе Appium-а используя client-side execution & API облачного сервиса
5. Интеграция с hockeyApp.
6. Как мы тестировали и что из этого получилось – личная история
Fullstack End-to-end test automation with Node.js, one year laterMek Srunyu Stittri
Airware's cloud automation team returns with a year’s worth of lessons learned, and will share the challenges involved with building a full-stack test automation framework with Node.js while using the latest and greatest in JavaScript tools.
Topics
Async / Await - an alternative to Webdriver’s built-in control flow. Limitations with control flow. Use Babel to write the latest ES6 JavaScript syntax. Custom reporter with screenshots from Sauce Labs. Parallel tests and accurate reporting.
Type-safe JavaScript with Facebook’s Flow-type library.
Robust visual diffs
Node.js and Selenium Webdriver, a journey from the Java sideMek Srunyu Stittri
** Update **
There is now an updated version of this implementation with Javascript Async/Await
Recording - https://www.youtube.com/watch?v=BTpMB2-8qMM
Slides - https://www.slideshare.net/MekSrunyuStittri/endtoend-test-automation-with-nodejs-one-year-later
Abstract
With the growing popularity of NodeJS, many companies have embraced its adoption and gone full stack. The next logical move is to have the test framework be on the same stack. Unfortunately, proven ways of implementing a Selenium framework in JavaScript are very limited and very much fragmented.
Airware builds software and hardware for commercial drones; their cloud team ships code to production every week. In this talk, their cloud automation team will talk about: how they have built their Selenium framework with Node.js; the challenges of coming from a synchronous programming language like Java; lessons learned along this journey; and other technologies/tools used to complement testing their cloud and rolling out quality.
Recording by New Relic and SauceLabs - https://www.youtube.com/watch?v=CqeCUyoIEo8
Android Automation Testing with SelendroidVikas Thange
The document discusses testing Android applications with Selendroid. It provides an overview of Selendroid, including its architecture and major components. It also covers how to set up and launch Selendroid, write tests with the Selenium API, and use the Selendroid Inspector tool to help develop tests.
IBM Connect 2017: Back from the Dead: When Bad Code Kills a Good ServerSerdar Basegmez
The document provides a case study describing performance issues experienced by a critical Domino server at a company, referred to as Acme, Inc. It details the steps taken to analyze the problem, which included collecting log and system usage data, inspecting Domino and application configuration files, and isolating potential causes. The analysis revealed that agents were running at inappropriate times and overlapping with other maintenance tasks, negatively impacting database performance. Code in a critical application was also identified as inefficiently performing large searches. The document outlines how the operating system, Domino, and application configurations were optimized to address these issues and ensure tasks had adequate resources. The results included significantly improved system activity index, database usage and compression, and resolution of odd overnight
This document provides tips and tricks for using Selenium. It discusses using headless browsers like PhantomJS to speed up test execution. It also covers visual testing, using a proxy server to manipulate requests, and workarounds for actions like uploading files and downloading secure files without the browser dialog. Additional resources are provided for getting started with Selenium Grid and for subscribing to weekly Selenium tips.
UI tests have supported re-engineering of the Cookpad iOS app, which has over 35 million users. The app is developed continuously, releasing every 2-4 weeks. UI tests were implemented in 2014 to check external and internal changes as the app is re-written and refactored. Automated UI tests help reduce fear for developers during re-engineering. They also help ensure quality and stability as the mobile environment and services change frequently. UI tests are important for legacy re-engineering projects to enable continuous development.
BP 308 - The Journey to Becoming a Social Application DeveloperSerdar Basegmez
IBM Connect 2014 session, Serdar Basegmez and Graham Acres.
Absract: You probably have heard about the Social Business Toolkit SDK but do you know what it is and what it's really about? Yes, it's XPages, it's JavaScript, and it's Java, and it works with Domino, Connections and SmartCloud, but what about the other apps that your users are asking for? What about Dropbox, Twitter and other platforms? This session will give developers a strong foundation to build on. You will learn the tools to use and invest in, the place to start and the roadblocks to avoid when building your skills. You will leave with practical examples and code samples to show you how easy it is to extend your apps and bring the power of Social Business to your organization.
BP207 - Meet the Java Application Server You Already Own – IBM DominoSerdar Basegmez
This document discusses preparing the runtime and development environments for DOTS (Domino OSGi Tasklet Service) on IBM Domino. It describes copying necessary JAR files and executable files to directories within the Domino program folder to prepare the runtime environment. It also mentions that the Eclipse IDE is needed for developing DOTS tasklets as OSGi bundles, and steps will be provided for configuring Eclipse to develop plugins that can run on the Domino OSGi environment.
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®Serdar Basegmez
This document summarizes a presentation on processing background tasks on IBM Domino servers. It discusses:
1) DOTS (Domino OSGi Tasklet Services), which provides the ability to develop and run OSGi-level server tasks (tasklets) for Domino for unattended processing such as scheduled reports and batch jobs.
2) Asynchronous processing techniques for XPages applications, including using Eclipse Jobs and thread pools to run long-running tasks asynchronously without blocking the user interface.
3) Alternative approaches like using a thread management bean to simplify managing background threads in XPages.
Cdm mil-18 - hypermedia ap is for headless platforms and data integrationDavid Gómez García
Slides from my talk at Codemotion Milan 2018. Speaking about how Headess and Hypermedia REST APIs can leverage the way . we integrate different platforms and share date between them
Application Development & Database Choices: Postgres Support for non Relation...EDB
This talk will cover the advanced features of PostgreSQL that make it the most-loved RDBMS by developers and a great choice for non-relational workloads.
This webinar will explore:
- Global adoption of Postgres
- Document-centric applications
- Geographic Information Systems (GIS)
- Business intelligence
- Central data centers
- Server-side languages
The document discusses best practices for crafting evolvable API responses. It advocates taking back control of representations by thinking of responses as messages rather than objects. This allows APIs to build payloads with just enough data to solve the problem and survive changes over time. The document explores using attribute groups, links, and established formats like HAL and JSON-LD to build representations that are minimal yet provide essential context.
MIKE Stack Introduction - MongoDB, io.js, KendoUI, and ExpressCharlie Key
You don't need skinny jeans, mason jar lunches, and cups of pu-er cha to demonstrate your hipsterism. What you really need is the M.I.K.E. stack. Built using Mongo, io.js, Kendo UI, and Express, M.I.K.E. will bring your web apps into the world with a hot new JavaScript framework built for performance and ease of deployment. In this seminar, we'll walk through building a web app from scratch within Visual Studio and deployed as a Node-based, Mongo-powered project on Modulus.io, a superb Node hosting platform. We'll discuss building a web api using Express and then discuss fleshing out the frontend using KendoUI widgets, building a simple contact form styled with a responsive Bootstrap theme. Want to be that VS developer who's in the cool kids club? We'll show you how.
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobileLoiane Groner
This document discusses using Java and HTML5 platforms for desktop, web, and mobile applications. It covers key technologies like JSON, WebSockets, RESTful web services, and frameworks like Angular and Sencha. It also provides examples of building applications with these technologies, including a contacts app example in Java EE and Angular.
Introducing Azure DocumentDB - NoSQL, No ProblemAndrew Liu
Application developers support unprecedented rates of change – functionality must rapidly evolve to meet changing customer needs and to respond to competitive pressures while user populations can grow dramatically and unpredictably. To address these realities, developers are selecting document-oriented databases for schema flexibility, scalability and high performance data storage.
In this session, we will get hands on with Azure’s NoSQL document database service. Azure DocumentDB offers full indexing of JSON documents, SQL query capabilities and multi-document transactions. Learn how to get started with Azure DocumentDB and hear about some of the recent improvements to the service.
Cross-Platform Data Access for Android and iPhonePeter Friese
Many Apps need to access data online. This talk discusses problems and solutions when accessing remote data with Android and iPhone. After a brief review of a number of frameworks, an approach is outlined to implement data access in a cross-platform manner using a DSL.
The web has changed! Users spend more time on mobile than on desktops and they expect to have an amazing user experience on both platforms. APIs are the heart of the new web as the central point of access data, encapsulating logic and providing the same data and same features for desktops and mobiles.
In this talk, I will show you how in only 45 minutes we can create full REST API, with documentation and admin application build with React.
OData: Universal Data Solvent or Clunky Enterprise Goo? (GlueCon 2015)Pat Patterson
Why would anyone but the most pedestrian enterprise developer be interested in a data access protocol originally designed by Microsoft, implemented in XML and handed to OASIS for standardization? The Open Data Protocol, or OData for short, has evolved into a clean, RESTful interface for CRUD operations against data services. Alongside the usual enterprise suspects such as Microsoft, Salesforce and IBM, OData has been adopted by government and non-profit agencies to open up their data and make it accessible to the public. For developers wanting to consume data, or create their own OData services, there's no shortage of open source options, from Apache Olingo in Java to node-odata and ODataCpp. Whether you're accessing customer orders in SAP or the Whitehouse visitor book, you're going to need some OData smarts.
R-Users Group JSON and ReST Introduction using TwitterKevin Smith
Social insights are one of todays Big Data topics. It is not enough to explore analytics on the data you have but also to incorporate data you can obtain. The #1 obtainable data today is Social. This presentation walks through setting up a Twitter API account and accessing that data through R. On the way obtaining a basic understanding of JSON and ReST R methods.
CouchApps are web applications built using CouchDB, JavaScript, and HTML5. CouchDB is a document-oriented database that stores JSON documents, has a RESTful HTTP API, and is queried using map/reduce views. This talk will answer your basic questions about CouchDB, but will focus on building CouchApps and related tools.
The document discusses interoperable JavaScript-based client/server web applications using REST, JSON, JSON Schema, JSONQuery, Comet, and frameworks like Dojo and Persevere. Key aspects covered include service-oriented architectures, REST principles, JSON referencing, JSON Schema, querying data via JSONPath and JSONQuery, and live data notifications with REST channels and Comet.
1. Governments are releasing open data to increase transparency and stimulate applications, but data dumps have limitations like siloed data and static formats.
2. Linked data addresses this by using URIs and standards to integrate data on the public sector web. However, the data model and query methods are still barriers for most developers.
3. Middleware like a Linked Data API can provide a web-friendly interface to access linked data through RESTful APIs and standard formats like JSON, lowering the barrier to entry for developers while retaining the benefits of linked data.
How to separate the f2 e and sde in web development for_taobaotaobao.com
This document discusses the reorganization of a development team at Cisco WebEx. It proposes separating front-end developers (F2E) and server-side developers (SDE) into different teams for improved productivity, quality, and skill development. It also recommends establishing explicit requirements, change control processes, and an agreed-upon data interface specification to facilitate separation and cooperation between the F2E and SDE teams.
Engage 2023: Taking Domino Apps to the next level by providing a Rest APISerdar Basegmez
Apps to the next level by providing a Rest API
Session De13 from Engage User Group Conference 2023 with Tom Van Aken
"Providing RESTful APIs has become an increasingly common requirement in recent times. Whether you're just starting a new project or looking to level up your existing Notes/Domino application, finding the right approach is the key to success. By giving you some real-world scenario's and examples, this session will arm you with the knowledge and best practices to help you pick the right tools for the right job when it comes to performance, scalability, and security.
We'll also discuss pros and cons of the brand new Domino REST API (Project Keep) and custom development with Java or LotusScript. Don't miss this opportunity to uncover the hidden gems and avoid the pitfalls of integrating external systems with your Domino platform. Join us and be ready to take your platform to new heights!"
(25/April/2023)
An introduction to modern web technologies HTML5, including Offline, Storage, and Canvas Embedded JavaScript RESTful WebServices using MVC 3, jQuery, and JSON Going mobile with PhoneGap and HTML and CSS
DevOps in the era of serverless computing - Alessandro Vozza - Codemotion Ams...Codemotion
Computing is moving fast towards an API-only model where canonical infrastructure (containers, VM's and servers) are rendered obsolete and replaced by an undefined, "serverless" Function-as-a-service (FaaS) model. If this is the lay of the land, what roles are left to the army of "DevOps engineers" that are now filling the ranks of uncountable enterprises and startups? As any transformational change, fear and anxiety for job security might lead some to close down and reject the unstoppable trend upon us; however, I'll argue that this could be the beginning of a DevOps 3.0 revolution.
The document discusses Dr. Pouria Amirian and his background as a Big Data Project Manager and Data Scientist at the University of Oxford. It notes that by 2015, 4.4 million IT jobs globally will be created to support Big Data, but there is a shortage of talent to fill these jobs, with only one third expected to be filled. The major areas of demand are listed as Big Data, Mobile, and Social Computing, with Cloud Computing providing the foundation.
Similar to ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy! (20)
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
What is Master Data Management by PiLog Groupaymanquadri279
PiLog Group's Master Data Record Manager (MDRM) is a sophisticated enterprise solution designed to ensure data accuracy, consistency, and governance across various business functions. MDRM integrates advanced data management technologies to cleanse, classify, and standardize master data, thereby enhancing data quality and operational efficiency.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Atelier - Innover avec l’IA Générative et les graphes de connaissancesNeo4j
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Allez au-delà du battage médiatique autour de l’IA et découvrez des techniques pratiques pour utiliser l’IA de manière responsable à travers les données de votre organisation. Explorez comment utiliser les graphes de connaissances pour augmenter la précision, la transparence et la capacité d’explication dans les systèmes d’IA générative. Vous partirez avec une expérience pratique combinant les relations entre les données et les LLM pour apporter du contexte spécifique à votre domaine et améliorer votre raisonnement.
Amenez votre ordinateur portable et nous vous guiderons sur la mise en place de votre propre pile d’IA générative, en vous fournissant des exemples pratiques et codés pour démarrer en quelques minutes.
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
DDS Security Version 1.2 was adopted in 2024. This revision strengthens support for long runnings systems adding new cryptographic algorithms, certificate revocation, and hardness against DoS attacks.
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
Takashi Kobayashi and Hironori Washizaki, "SWEBOK Guide and Future of SE Education," First International Symposium on the Future of Software Engineering (FUSE), June 3-6, 2024, Okinawa, Japan
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
ICONUK 2016: REST Assured, Freeing Your Domino Data Has Never Been That Easy!
1. REST Assured, Freeing Your Domino Data
Has Never Been That Easy!
Serdar Basegmez, Developi Information Systems
16th September 2016
2. • IBM Champion (2011 - 2016)
• Developi Information Systems, Istanbul
• Contributing…
• OpenNTF / LUGTR / LotusNotus.com
• Featured on…
• Engage UG, IBM Connect, ICON UK, NotesIn9…
• Also…
• Blogger and Podcaster on Scientific Skepticism
Serdar Başeğmez
3. RESTful Web Services
Representational state transfer (REST) is an architectural style used for
web development. Systems and sites designed using this style aim for
fast performance, reliability and the ability to scale (to grow and easily
support extra users). To achieve these goals, developers work with
reusable components that can be managed and updated without
affecting the system as a whole while it is running.
Source: https://en.wikipedia.org/wiki/Representational_state_transfer
5. Old School Web Applications
Source: https://speakerdeck.com/jeffschenck/rest-easy-api-security-done-right
User Interface Business Logic Datastore
Front-end Back-end
ASP, PHP, CGI, Web Agents, JSP, etc.
← HTML, CSS, JavaScript
Forms →
6. Web Applications Evolving
User Interface Business Logic Datastore
Front-end Back-end
Async web apps, Ruby on Rails, Django, JSF, XPages, etc.
← HTML, CSS, JavaScript
Forms, AJAX →
7. Web Applications Evolving
User Interface Business Logic Datastore
Front-end Back-end
Modern Web frameworks, Angular.js, React.js, etc.
← HTML, CSS, JavaScript
← REST →
8. Web Applications Evolving
User Interface Business Logic Datastore
Mobile Applications
Back-end
Modern Web frameworks, Angular.js, React.js, etc.
← HTML, CSS, JavaScript
← REST →
Front-end
9. Web Applications Evolving
User Interface Business Logic Datastore
Mobile Applications Back-end
Modern Web frameworks, Angular.js, React.js, etc.
← HTML, CSS, JavaScript
← REST →
Front-end Microservice Microservice Microservice
11. Stateless / Cacheable / Layered
Every request processed independently
Everything cacheable
Client does not care who cooked the meal in the kitchen
⇣
Scalable, Robust, Resilient
12. The Conversation Makes Sense!
Source: http://www.bizcoder.com/a-fresh-coat-of-rest-paint-on-a-soap-stack
14. The Conversation Makes Sense!
http://appserver.company.com/apps/contacts.nsf/
GiveMeTheContactWeNeedPleaseAgent?OpenAgent&id=1522
or…
http://appserver.company.com/api/contacts/1522
15. Conventions on URLs
GET http://appserver.company.com/api/contacts
GET http://appserver.company.com/api/contacts/UK/London
POST http://appserver.company.com/api/contacts
Retrieve Contacts / Create a new Contact…
16. Conventions on URLs
GET http://appserver.company.com/api/contacts/1522
PUT http://appserver.company.com/api/contacts/1522
DELETE http://appserver.company.com/api/contacts/1522
Retrieve/Update/Delete the Contact resource with id=1522…
17. URI GET PUT POST DELETE
/contacts/ List Contacts Replace Contacts Create New Contact Delete Contacts
/contacts/id Retrieve a Contact Replace a Contact N/A (generally) Delete a Contact
Source: https://en.wikipedia.org/wiki/Representational_state_transfer
Conventions on URLs
18. Unconventional uses in URLs
GET https://api.twitter.com/1.1/statuses/show.json?id=1234567890
Retrieve the Tweet with id=1234567890…
20. Motivation
Putting stuff into a small device!
Socializing with other developers!
Opening to the wild… New animals out there!
Enough! We are moving…
All / Some / None of the above
21. Options
Domino Access Services (DAS)
Extension Library Components for REST
Hardcoding (XAgents, Web agents)
Apache Wink Servlets
22. RESTful Options on Domino
Benefits Challenges Suggested When?
Domino Access Services
(DAS)
No Backend Code
Zero-setup
Limited Control
No Business Logic
Exposes the Internals
Simple internal integrations
ExtLib Components
for REST
Less Backend Code
Minimal Setup
Partial/Full Customization
Error Handling
Spaghetti Code
URL Conventions
Simple needs for a limited
scope
Hardcoding
(XAgents, Web agents)
Tailor-made
No Learning Curve
Hardcoding Everything
Spaghetti Code
URL Conventions
Very specific needs for a
limited scope
Apache Wink Servlets
Tailor-made
Based on JAX-RS
OSGi Benefits
Learning Curve
Barrier to Entry
Large scope
implementations, API
Design
23. Apache Wink Project
Complete implementation of JAX-RS v1.1 Specification
Also includes RESTful Client module
Extension Library comes with Apache Wink 1.1.2
Open Source
Spring integration, WebDAV support
25. Resource and Resource Representation
Collection
ResourceResourceResource
SubresourceSubresourceSubresource
Resource
• Any addressable object is a resource.
• A resource class is;
• Implements RESTful interactions (GET, POST, etc.)
• A pure Java object decorated with annotations
• Do not confuse with Model class.
Resource Representation
• The content of an object is called as Representation
• JSON, XML, Text, Form data, etc.
26. @Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
{
"zip": "13202",
"state": "NY",
"lastName": "Abbate",
"middle": "J",
"country": "US",
"emailAddress": "Jessica.J.Abbate@trashymail.com",
"number": "DLEY-ACLH6Y",
"city": "Syracuse",
"firstName": "Jessica"
}
Contact Resource Class
Contact Resource
Short JSON Representation
27. Resources
@Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
The base URI for the
resource
In the demo, the root path of
the plugin is “/twink”. So this
class is enabled for requests
made to:
/twink/contacts/*
29. Resources
@Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
This method responds to
GET requests.
No path defined, so this is
the default responder.
30. Resources
@Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
This method also responds
to GET requests.
But it the request path will
be elected based on this
format.
31. Resources
@Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
Parameters will be injected
into methods.
/contacts?start=X&count=Y
/contacts/someId
Wink servlet will handle type
conversion.
It supports ordinary java
objects, enums, primitives,
etc.
32. Resources
@Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
There are lots of options of
returning response.
ResponseBuilders and
some other helpers make it
quite easy.
33. Resources
@Path("/contacts")
public class ContactResource {
private DominoAccessor accessor = new DominoAccessor(ContextInfo.getUserSession());
@GET()
public Response getContactList( @QueryParam("start") int start, @QueryParam("count") int count) {
List<Contact> contactList = accessor.pullContacts(start, count);
String result = ModelUtils.toJson(contactList).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@Path("/{id}")
@GET()
public Response getContact(@PathParam("id") String id) {
Contact contact = accessor.findContact(id);
if(null == contact) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
}
Wink handles much of the
error handling.
Still you can inject your own
errors.
34. Resources
@Path("/contacts")
public class ContactResource {
…………
@POST()
@Consumes(MediaType.APPLICATION_JSON)
public Response postContactJson(String body) {
Contact contact = ModelUtils.buildContactfromJson(body);
accessor.saveNewContact(contact);
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@POST()
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response postContactForm(BufferedInMultiPart formData) {
Contact contact = ModelUtils.buildContactfromMultipart(formData);
accessor.saveNewContact(contact);
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
This methods respond to
POST requests.
This time the selection
depends on the incoming
data type.
Client marks the request
with Content-Type header
and Wink will select the
appropriate method here.
35. Resources
@Path("/contacts")
public class ContactResource {
…………
@POST()
@Consumes(MediaType.APPLICATION_JSON)
public Response postContactJson(String body) {
Contact contact = ModelUtils.buildContactfromJson(body);
accessor.saveNewContact(contact);
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
@POST()
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response postContactForm(BufferedInMultiPart formData) {
Contact contact = ModelUtils.buildContactfromMultipart(formData);
accessor.saveNewContact(contact);
String result = ModelUtils.toJson(contact).toString();
return Response.ok(result, MediaType.APPLICATION_JSON).build();
}
}
Wink injects the incoming
data into the method
automatically.
Apache Wink also provides
several classes to process
different data formats
(Multipart, Atom, XML,
JSON, etc.)
37. What is your purpose?
Quick and narrow-scoped services
Moving your app to a different web framework
Enable applications for native mobile access
Create a REST API for your apps
38. Plan first!
Determine resource types and capabilities to be allowed
(Resources, Representations, actions, etc.)
The distribution of tasks
(Front-end and Back-end) responsibilities
Collaborate with consumers, if you can
Versioning / Test API
39. Sketch an architecture
Keep your architecture layered
Let your luggage be history
Design as if the consumer will exploit your application, even you!
40. A sample architecture
RESTful Resources
ResourceResourceResource
SubresourceSubresourceSubresource
Model Classes
Data Objects
Conversion
Resource Representation ←→ Model
Data Access
Model ←→ Documents
Business Logic
Actions (CRUD, etc.)
Rules, validations, etc.
Databases
ResourceResourceDocuments
ResourceResourceViews
ResourceResourceetc.
Security Utilities
42. Getting hands dirty
Test and Development
Local Domino Server
Domino Designer Client
Eclipse / XPages SDK / Debug Plugin
REST testing utility (e.g. Postman)
Plugin Development
Guides / Demos / Blogs
Configure Eclipse
Plugin template for Wink project
Add Libraries to your project
(See Resources section)
43. Annotations
• @Path
Specifies the relative path for a resource class or method
• @GET, @PUT, @POST, @DELETE, @HEAD
Specify the HTTP request type of a resource
• @Produces
Specifies the response Internet media types (content negotiation)
• @Consumes
Specifies the accepted request Internet media types.
44. Annotations
• @PathParam
Binds the method parameter to a path segment
• @QueryParam, @MatrixParam, @FormParam
Binds the method parameter to a query/matrix/form parameter
• @HeaderParam, @CookieParam
Binds the method parameter to a HTTP header/cookie parameter
• @Context
Returns the entire context of the object
@Context HttpServletRequest request
• @DefaultValue
Specifies a default value for the above bindings when the key is not found.
@Default(“1”) @QueryParam(“start”) int start
45. Annotations
• @Provider
Providers are used for transformation between entities and representations.
Wink comes with several providers and more can be developed for special
purposes.
• @Asset
More advanced implementation of providers. Especially suitable for automatic
transformation between data objects and representations.
• @Parent
Defines a parent resource that has a base URI. (See Versioning)
• @Scope
By default, every resource class instantiated per request. Scope can define
longer life cycles for resource instances (e.g. singletons).
46. JSON Handling
• Wink and IBM Commons provide JSON Object helpers
• A library for JSON processing strongly suggested
• Hardcoding JSON data structure becomes more and more difficult.
• Automatic Serialization / Deserialization is life saving
• Tip: Look into Jackson and GSON libraries
48. Notes Session
• NotesSession related to the authenticated user:
• ContextInfo.getUserSession()
• At the servlet level,
• No SessionAsSigner
• No SessionAsSignerWithFullAccess
• No CurrentDatabase
• Elevated level of access is a bit tricky.
• Refer to DominoRunner XSnippet
49. OpenNTF Domino API
• OpenNTF Domino API is compatible with Apache Wink
• One trick: You need to customize the servlet
• Refer to the blog post by Paul Withers
• Advantages
• No recycle!
• Modern Java practices (Maps, generics, etc.)
• Much better development experience
• Ability to use elevated session
• Refer to the OpenNTF Domino API Project page for more
51. Summary
RESTful Services Architecture
Designing RESTful services for Domino Applications
Basic Concepts around RESTful Services
Architecture Examples
Annotations used by Apache Wink
Some tricks for Domino developers
52. Takeaway
Download and play with the template and demo plugins
Experiment JAX-RS annotations
Get yourself familiar with Plugin development
Download Extension Library source code and look its design
Study on RESTful design practices and JAX-RS concepts
53. Resources
• Serdar Başeğmez: Demo Plugin and Apache Wink Template
https://github.com/sbasegmez/RestAssuredDemo
• Apache Wink Project
https://wink.apache.org/
• Paul Withers: From XPages Hero To OSGi Guru: Taking The Scary Out Of Building Extension Libraries
http://www.slideshare.net/paulswithers1/ibm-connected-2015-mas103-xpages-performance-and-scalability
• Paul Withers: XPages OSGi Plugins series
http://www.intec.co.uk/xpages-osgi-plugins-1-an-introduction/
• John Cooper: Domino OSGI (Part 1) - Configuring Eclipse for XPages OSGI Plugins
http://developmentblog.johnmcooper.co.uk/2014/05/configuring-eclipse-for-xpages-osgi-plugins-part1.html
• John Dalsgaard: Wrap An Existing Jar File Into A Plug-in
https://www.dalsgaard-data.eu/blog/wrap-an-existing-jar-file-into-a-plug-in/
• Toby Samples: JAX-RS or THE way to do REST in Domino series
https://tobysamples.wordpress.com/2015/04/28/jax-rs-or-the-way-to-do-rest-in-domino-part-1/
• Jesse Gallagher: Eclipse Tutorial for Domino Developers
https://github.com/jesse-gallagher/eclipse-tutorial-oct2015/wiki/Java