Developing OSLC Applications
Get started with developing OSLC applications
Open Services for Lifecycle Collaboration (OSLC) is a community that writes specifications to integrate software. Learn more at Why develop OSLC applications and at our main site.
For a high-level overview of how to add OSLC support to software, we recommend our video “Getting started on implementing OSLC“:
The description on YouTube includes a table of contents and links to references.
Explore our tutorial
For a more detailed look at what goes into OSLC support, read through our tutorial “Integrating Products with OSLC”, which walks you through building an adapter that adds OSLC support to the popular Bugzilla defect-tracking software.
The concepts in the tutorial are broadly applicable to other software.
If you’re building an OSLC provider (in other words, software that outputs OSLC resources), you’ll learn how to
- Provide Service Providers and catalogs
- Represent Bugzilla bugs as OSLC Change Management resources
- Provide UI Previews
- Provide a delegated UI for finding existing bugs
- Provide a delegated UI for creating new bugs
- Allow software to programmatically create new bugs
If you’re building an OSLC consumer application, you’ll learn how to:
- Link to OSLC resources in another application and display previews
- Find, select, and create bugs without leaving the application with delegated UIs
- Parse OSLC resources
- Create new bugs automatically
The tutorial has working sample applications and detailed instructions for running them.
Why develop OSLC applications
Integrating software is hard; we want it to be easier. And we need your help.
We define standardized ways to represent common resources in software development (for example, a defect or a performance test). We also define standardized methods to allow other applications to access, display, preview, find, create, and update those resources.
With standardized resources and methods, any tool can access and manipulate the data and artifacts from any other compliant tool. So instead of a variety of fragile point-to-point integrations you have one common way to connect and integrate many products. It’s not quite plug-and-play, but it’s close.
We want OSLC to succeed because better and easier integrations will save everyone time and money. And we think that software with OSLC integration has a competitive advantage.
Don’t just take our word for it. Icaro Technologies estimated that they could have saved two million dollars over two years if they used OSLC standards for a project with more than 10 integrations. And major industry groups like SPRINT and EADS have decided that OSLC-compliant software can help them collaborate and verify requirements on highly complex products like commercial airplanes.
OSLC specifications are free to adopt, and we want them to spread. So help us out!
To build software that supports OSLC, you should be familiar with the following concepts:
Linked data is the main technical foundation of all of our specifications. The video below provides a brief overview of the value of linked data and how we implement it with OSLC:
If you’re new to linked data and RDF, we’ve put together a playlist of videos that can help you catch up.
RESTful web architecture and HTTP
You should be familiar with designing RESTful applications.
For a quick primer, we recommend “Learn REST” by Dr. M. Elkstein, particularly these sections:
- What is REST?
- REST as Lightweight Web Services
- How Simple is REST?
- More Complex REST Requests
- REST Server Responses
For OSLC implementations, you must use HTTP protocol.
RDF, Turtle, JSON, and HTML
We require services and resources to be represented in RDF, but you might prefer to supplement that with a variety of machine-readable and human-readable formats like Turtle, JSON, or HTML.
Instead of string parsing and regular expressions, you will definitely want to explore using an RDF parser such as Apache Jena.
OSLC does not require OAuth, but it is the most common approach for managing authentication between clients.
Services, resources and design patterns
The OSLC Core specification defines the basic patterns and protocols that any OSLC software must implement. The other workgroups define additional resources or extend existing ones, but they do not add new protocols.
Here are the major resources defined in the OSLC Core specification:
|Resource or Pattern||Description||More information|
|Service Provider||A resource that describes a collection of resources and tells you how to create new resources, find existing resources, or expose a user interface to do either||OSLC Primer: Service Provider|
|Resource Paging||A pattern to break long lists of resources into smaller pages, and provide a URL for the next page||OSLC Primer: Resource Paging|
|Queries||Standard query string patterns to retrieve a subset of resources or properties||OSLC Primer: Query mechanisms|
|Resource Shapes||Documents that define and describe the properties a resources should have, including acceptable values, cardinality, and whether or not those properties are required||OSLC Primer: Resource Shapes|
|Creation Factory||A service that creates new resources and (via HTTP POST) and may also provide the Resource Shape for new resources||Core 2.0: Creation Factories|
|Service Provider Catalog||A resources that lists a set of ServiceProviders||OSLC Primer: ServiceProvider|
|Delegated User Interface (UI) dialogs||A method for embedding an interface to create or find resources inside another tool||OSLC Primer: Delegated UI dialogs|
|UI Previews||A method for discovering and displaying a preview of a resource in another tool||OSLC Primer: UI Preview|
To explore some of our other specifications, the OSLC Core Workgroup maintains a list of OSLC vocabularies and specifications that includes relationship diagrams.
Tools & SDKs
The Eclipse Lyo project has a variety of tools to help you adopt OSLC specifications:
- OSLC4J: a Java SDK for OSLC providers and consumers that lets you define OSLC resources and convert them to Java objects
- Perl libraries and samples: modules for Perl for interacting with OSLC providers, including the Net-OSLC PERL library
- Test Suites: test if your OSLC applications complies with the requirements of our specifications
- Tracked Resource Set SDK: a test suite, toolkit, and sample application for the Tracked Resource Set specification
You do not have to use the Eclipse application to use Eclipse Lyo: Although much of the documentation assumes you will be using Eclipse, the source code is available in a Git repository and much of it does not require the Eclipse application to work.
Sample applications and code
If you’d like to explore some existing code, there are a variety of samples and existing applications available.
The Communications Workgroup has a list of Open Source OSLC projects (along with their licenses).
If you’d like to explore a basic application that provides OSLC Service Provider resources and UI previews, Vijay Kalangumvathakkal of developerWorks has some simple applications available to download and try out.
Finally, many of the software development kits include sample applications. The OSLC4J component of Eclipse Lyo has a variety of applications:
- a stock quote sample applications
- a Change Management provider
- a Quality Management provider
- an Automation provider
- the aforementioned Bugzilla Change Management adapter
The Lyo Client component in Eclipse Lyo includes additional APIs and sample code that addresses a variety of common OSLC use cases including login, OAuth, service discovery, and queries.
The OSLC4Net project includes sample applications if you favor .NET/C#.
OSLC Open Source Node.js Projects
Eclipse/Lyo provides a set of Java based APIs and generative tools to support the creation of OSLC domain servers and integrated client applications. While Eclipse/Lyo provides a very rich and robust platfrom for OSLC development, it has a relatively high learning curve and that can increase development time, costs and risks.
The OSLC4JS Projects
The following sections provide a brief description of each OSLC4J sub-project and provide links to the development sites and related work products. The figure below shows the relationship between the modules created in the projects, and how they are assembled into a Web application.
Adapter middleware in the figure represents some Express.js middleware component that provides CRUD access to some existing data source. This provides a simple way for vendors to provide OSLC access to their data sources without having to implement the details of OSLC and/or LDP.
A oslc4js Slack Channel has been created to facilitate collaborative development of these Open Source Projects.
|OSLC Browser||A sample OSLC Web application that uses the OSLC Service to provide a means of browsing OSLC resources. OSLC Browser allows you to configure a connection pool of contributing OSLC servers, and provides a convenient means of browsing the content contributed by those servers. The federation of thigs information is supported by the OSLC service with can also support OSLC domains, extension to domains, integration between domains. This allows the OSLC Browser to act as a federation hub for OSLC resources where stakeholder viewpoints, views (i.e., active dashboards) can be created to support integration needs.||Mural Design Wiki Track & Plan Bluemix App app route|
|OSLC Service||A generic Node.js Express middleware OSLC 3.0 service that can support any domain and can be easily adapted to any applicable data source. This services also utilizes the LDP Service.||Wiki Track & Plan npm package|
|OSLC Server||A minimal OSLC server that uses the oslc-service and ldp-service and can be accessed using a browser REST client. An instance of this server is deployed to IBM Bluemix in order to provide a platform for OSLC experimentation and testing.||Wiki Track & Plan Bluemix App app route|
|LDP App||A sample Linked Data Platform (LDP) Web application that uses the LDP Service and supports CRUD operations and a graph of linked data.||Wiki Track & Plan Bluemix App app route|
|LDP Service||Express middleware providing LDP capabilities to Web apps, with storage of JSON-DL in MongoDB.||Wiki Track & Plan npm package|