{"id":29170263,"url":"https://github.com/mendixlabs/service-broker-skeleton-code","last_synced_at":"2025-08-12T02:14:26.601Z","repository":{"id":78879631,"uuid":"494441452","full_name":"mendixlabs/service-broker-skeleton-code","owner":"mendixlabs","description":null,"archived":false,"fork":false,"pushed_at":"2022-05-23T03:51:04.000Z","size":308,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-18T07:41:31.247Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mendixlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-20T11:42:54.000Z","updated_at":"2022-05-23T03:49:16.000Z","dependencies_parsed_at":"2023-07-19T02:16:11.177Z","dependency_job_id":null,"html_url":"https://github.com/mendixlabs/service-broker-skeleton-code","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mendixlabs/service-broker-skeleton-code","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendixlabs%2Fservice-broker-skeleton-code","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendixlabs%2Fservice-broker-skeleton-code/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendixlabs%2Fservice-broker-skeleton-code/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendixlabs%2Fservice-broker-skeleton-code/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mendixlabs","download_url":"https://codeload.github.com/mendixlabs/service-broker-skeleton-code/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mendixlabs%2Fservice-broker-skeleton-code/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269987123,"owners_count":24508176,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-12T02:00:09.011Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-01T12:39:35.756Z","updated_at":"2025-08-12T02:14:21.579Z","avatar_url":"https://github.com/mendixlabs.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# service-broker-skeleton\n\n## Introduction\n\n- The `Open Service Broker API` project  defines an HTTP(S) interface between Platforms and Service Brokers. It allows `App Services Maker` to easily provide backing services to `Maker` (users) to `provision`, `gain access` to and `managing service offerings`.\n\n- `service-broker-skeleton` provides the template for implementation of `Open Service Broker API`.\n\n## Pre-Requisites\n\n- Please refer to [link](/docs/OSB-API-Overview.md) for common terminologies in Open Service Broker API\n \n## What is service-broker-skeleton? \n\nIt provides skeleton for following Service Broker API implementation \n\n1. Advertising a catalog of their service offerings and plans\n\n2. Provisioning (creating or updating) service instances\n\n3. Creating bindings between a service instance and a client application\n\n4. Deleting bindings between a service instance and a client application\n\n5. Deprovisioning (deleting) service instances\n\n## How do I use service-broker-skeleton? \n\n### 1. Clone this repository\n\n- Use following command to clone this repository\n```sh\ngit@ssh.gitlab.rnd.mendix.com:appservices/appserviceresourcemanager/sample-service-broker/service-broker-skeleton.git\n```\n\n\n### 2. Instance Service Implementation\n\n- **Service instance** is an instantiation of a Service Offering and Service Plan. There are several methods related to service instance.\n\n- Navigate to [InstanceService.java](/src/main/java/com/siemens/broker/service/InstanceService.java) and notice method implementation for service instance lifecycle such as create instance, update instance, delete instance etc. For example, `createServiceInstance` method to provision service instance\n\n```java\n  @Override\n    public Mono\u003cCreateServiceInstanceResponse\u003e createServiceInstance(CreateServiceInstanceRequest request) {\n\t// BEGIN USER CODE\n\tString serviceInstanceId = request.getServiceInstanceId();\n\tString planId = request.getPlanId();\n\tMap\u003cString, Object\u003e parameters = request.getParameters();\n\n\t// perform the steps necessary to initiate the asynchronous provisioning of all\n\t// necessary resources\n\n\tString dashboardUrl = \"\"; /* construct a dashboard URL */\n\t// END USER CODE\n\n\treturn Mono.just(CreateServiceInstanceResponse.builder().dashboardUrl(dashboardUrl).async(true).build());\n    }\n\n```\n\n**NOTE -** For Service Specific Implementation user need to update code between `// BEGIN USER CODE` and `// END USER CODE`\n\n\n\u003e Mono is implementation of Reactive Streams  for asynchronous stream processing.  It is one of the type Reactor. Each event is published to subscribers while ensuring that the subscribers are never overwhelmed.  Mono - is a publisher that produces 0 to 1 value. Operations that return a single element use this type.\n\n\u003cdetails\u003e\u003csummary\u003eClick to expand for Reactive programming concept \u003c/summary\u003e\n\n* *Reactive programming* used to build asynchronous, non-blocking and event-driven applications that can easily scale.\n* Reactor is a next-gen Reactive library for building non-blocking reactive applications on the JVM.\nThe overall idea is to operate Asynchronously with Backpressure using Publishers and Subscribers.\n\n\tHere, are several new concepts in Reactive programming. \n\n\t* Publisher - A Publisher is a provider of a potentially unbounded number of elements.\n\t\n\t* Subscriber - A Subscriber listens to that Publisher, asking for new data. Sometimes, it's also referred to as a Consumer.\n\n\t* Backpressure - The ability of the Subscriber to let the Publisher how many requests can it handle at the time. So it's the Subscriber that is responsible for the flow of the data, not the Publisher as it just provides the data.\n\u003c/details\u003e\n\nFor more details please refer [Mono](https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html)\n\nSimilarly, there are following methods to manage lifecycle on instance \n\n- `updateServiceInstance` - for asynchronous updation of instance  \n- `deleteServiceInstance` - for asynchronous deletion of instance\n- `getServiceInstance` - to  retrieve the details of the specified service instance \n- `getLastOperation` - determine the status of the operation in progress respectively.\n\n### 3. Service Instance Binding Implementation\n\n-  **Service Binding** - Represents the request to use a Service Instance. Service Bindings will often contain the credentials that can then be used to communicate with the Service Instance.\n\n- Navigate to [InstanceBindingService.java](/src/main/java/com/siemens/broker/service/InstanceBindingService.java) and notice method implementation for Service Bindings lifecycle such as create binding, delete bindings etc. \n\n- For example, `createServiceInstanceBinding` method to create a binding for provisioned service instance\n\n```java\n   @Override\n    public Mono\u003cCreateServiceInstanceBindingResponse\u003e createServiceInstanceBinding(\n\t    CreateServiceInstanceBindingRequest request) {\n\n\t// BEGIN USER CODE\n\tString serviceInstanceId = request.getServiceInstanceId();\n\tString bindingId = request.getBindingId();\n\n\t// create credentials and store for later retrieval\n\n\tString url = new String(/* build a URL to access the service instance */);\n\tString bindingUsername = new String(/* create a user */);\n\tString bindingPassword = new String(/* create a password */);\n\n\tCreateServiceInstanceBindingResponse response = CreateServiceInstanceAppBindingResponse.builder()\n\t\t.credentials(\"url\", url).credentials(\"username\", bindingUsername)\n\t\t.credentials(\"password\", bindingPassword).bindingExisted(false).async(true).build();\n\n\t// END USER CODE\n\treturn Mono.just(response);\n    }\n```\n\n**NOTE -** For Service Specific Implementation user need to update code between `// BEGIN USER CODE` and `// END USER CODE`\n\n\nSimilarly, there are following methods related to service bindings such as\n\n- `deleteServiceInstanceBinding` - delete any binding  credentials\n\n- `getServiceInstanceBinding` - to retrieve the details of the specified service binding\n\n\n## References \n\n- [Open Service Broker Specification](https://github.com/openservicebrokerapi/servicebroker/blob/v2.14/spec.md)\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmendixlabs%2Fservice-broker-skeleton-code","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmendixlabs%2Fservice-broker-skeleton-code","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmendixlabs%2Fservice-broker-skeleton-code/lists"}