# JSON REST Web Services Connector ## Introduction ### Description This connector allows the integration with any Web Service able to consume and generate JSON documents through REST communication. ### Managed System Every commercial product or custom web application allows REST communication with JSON documents. There are a lot of products that use this standard, for instance: - JIRA. - Oracle Field Service Cloud (OFSC). - Office 365. - AWS. - Google Cloud.

If your system is not in the previous list, it's possible to include it easily! For more information to check if your system may be synchronized with this connector you do not hesitate to contact us through our [Contact form](http://www.soffid.com/contactform/)

### Prerequisites It is needed a user with access and permissions to the endpoints and operations required in the scope of the integration. Also, the documentation, specification, or tutorial of the implementation of the JSON REST Web Service is required to apply the mapping configuration. ## Download and Install This addon is located in the Connectors section and its name is **REST (json) plugin**.

You can visit the [Addons Getting started page](https://bookstack.soffid.com/books/addons-getting-started/page/getting-started) for more information about the installation process.

## Agent Configuration ### Basic #### Generic parameters After the installation of the addon, you may create and configure agent instances. To configure this JSON REST Web Service Connector you must select "JSON Rest Webservice" in the attribute "Type" of the generic parameters section in the agents' page configuration.

For more information about how you may configure the generic parameters of the agent, see the following link: [Agents configuration](https://bookstack.soffid.com/books/soffid-3-reference-guide/page/agents "Agents")

[![image-1658998971348.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658998971348.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658998971348.png) #### Custom parameters Below there are the specific parameters for this agent implementation:
**Parameter**
**Description**
Server URL URL of the REST web service. Base URL for making calls.
Authentication method Available options: - **None**: no authentication (User and Password are not used). - **Basic**: it uses the User and Password to generate the authentication token. - **Bearer token**: it is provided by the application to which we are trying to connect. - **Token**: generate a token from a specific authentication URL. It is no longer used. - **Token oAuth Client Credentials**: authenticates based on a client ID and a client secret. - **Token oAuth Password Grant**: authenticates based on a client ID and a client secret plus a user name and a password. *(\*) You can find more information in the [Authentication method](#bkmrk-%28%2A%29-authentication-m) section.*
Enable debug Two options: "Yes", "No": it enables or not more log traces in the Synchronization Server log
Proxy hostOnly when the proxy is needed.
Proxy portOnly when the proxy is needed.
XML TemplatesAllows you to add new XML templates with SOAP requests and then configure them at attribute mappings.
--- ##### Authentication *method* **None**: no authentication is needed. There are no parameters to configure. [![image-1658916253736.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658916253736.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658916253736.png) **Basic**: the username and password are sent with each request. - **User Name**: user to authenticate. - **Password**: the password of the user to authenticate. [![image-1658916073500.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658916073500.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658916073500.png) **Bearer token** - Bearer token: this token is provided by the application to which we are going to connect. [![image-1658916094610.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658916094610.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658916094610.png) **Token**: calls the authentication URL with the POST method and with the username and password, and the response will be the token. It is no longer used. - **User Name**: user to authenticate. - **Password**: the password of the user to authenticate. - **Authentication URL**: URL to retrieve the token for the server's authentication (for the "Token" method). [![image-1658916132666.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658916132666.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658916132666.png) **Token oAuth Client Credentials** - **Authentication URL**: URL to retrieve the token for the server's authentication (for the "Token" method). - **Token attr. output**: the value is always *access\_token*. - **Request parameters**: - **Client ID**: it is like the user. - **Client secret**: it is the password. - **Scope**: it is the permissions. [![image-1658916165066.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658916165066.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658916165066.png) **Token oAuth Password Grant** - **User Name**: user to authenticate. - **Password**: the password of the user to authenticate. - **Authentication URL**: URL to retrieve the token for the server's authentication (for the "Token" method). - **Token attr. output**: the value is always *access\_token*. - **Request parameters:** - **Client ID**: it is like the user. - **Client secret**: it is the password. - **Scope**: it is the permissions. [![image-1658916206788.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658916206788.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658916206788.png) --- ### Attribute mapping This connector can manage users, accounts, roles, groups, and grants.

Note that any changes made to the methods will affect the properties and vice versa.

#### Methods This agent allows you to define methods to be called using the defined properties. There are some default methods, but you can customize your own methods. Default methods: - load - delete - update - insert - select **For each method**, the properties to set up are as follows:
**Properties**
**Description**
PathA valid URL to call. This path must be the continuation of the Server URL for making calls.
MethodAvailable methods to call a Rest API (GET, POST, PUT, DELETE, PATCH)
EncodingThe specific type of encoded data that will be used. There are three supported types: - application/x-www-form-urlencoded - application/json - text/xml
XML TemplateApplies only if it is *text/xml*. You need to write the name of the corresponding template defined on the XML Templates.
ParametersApplies with *application/x-www-form-urlencoded* and *application/json* - You must type which attributes, defined on the System attributes, will be sent. - If none are to be sent, you must write the hyphen character "-". - If nothing is typed, all parameters are sent.
Success HTTP CodesHTTP codes that should be interpreted as OK. If no code is entered, Soffid will take as valid codes the following: 200, 201, 204 and 404. If you type the Success HTTP codes, it will be not necessary to type the Failure HTTP codes. ```JavaScript 204 201 200 ``` ```JavaScript 200,212 ``` You can use blanks or commas to separate the codes.
Failure HTTP CodesSoffid will take by default as failure all codes not indicated in Success HTTP Codes. If you type the Failure HTTP codes, it will be not necessary to type the Success HTTP codes. ```JavaScript 400 403 ``` ```JavaScript 403,405, 400 ``` You can use blanks or commas to separate the codes.
ResultsGets the object or object list from the response received. You need to indicate a JSON attribute name to check and get the data. If this element is not present, or empty, the connector will conclude the user does not exist yet. You can type simple attribute names or even complex scripts.
Pagination URLOften, the response from the API Rest service does not contain all the data because the data is too large. In these cases, you can use the paging options to request the data in blocks. When the response gives us the URL of the next page to fetch, you must type the tag name of this attribute. ```JavaScript return links{"next"}; ``` You have to choose one of the paging methods, using both is not compatible.
Pagination scriptOften, the response from the API Rest service does not contain all the data because the data is too large. In these cases, you can use the paging options to request the data in blocks. You can type a complex script to get the next call that has to be done. There are two available objects: - response: JSON response as received - request: allows you to update the attributes and return true if you want to make a new call or false in another case ```Java o = response{"paging"}; if (o{"has_next_page"}) { nextPage = o{"page_number"} + 1; request.put("page", nextPage); return true; } else { return false; } ``` You have to choose one of the paging methods, using both is not compatible.
Condition scriptReturn false if you want to prevent a call.
Optional header Use this property to send HTTP header(s). More than one header can be sent by adding multiple properties Optional Header1. The value of the header is "HEADER:VALUE", for instance, "Accept:application/json".
##### Load
[![image-1658840538394.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658840538394.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658840538394.png) ##### Select [![image-1658840570200.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658840570200.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658840570200.png)
##### Insert [![image-1658840500870.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658840500870.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658840500870.png) ##### Update [![image-1658840611561.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658840611561.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658840611561.png)
##### Delete [![image-1658840656509.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658840656509.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658840656509.png) #### Properties In this agent, the configuration of the properties attributes is very important due to they define the functionality of the integration: This agent has five families of properties:
**Family**
**Description**
LoadUsed to retrieve all the objects in the target system
SelectUsed to retrieve an object in the target system
InsertUsed to create an object in the target system
UpdateUsed to update an object in the target system
DeleteUsed to remove an object in the target system
These families are involved in the following processes:
**Process**
**Families**
Reconcile automatic taskLoad + select
Authoritative automatic taskLoad + select
Sync new objectSelect + Insert
Sync updated objectSelect + Update
Sync deleted objectSelect + Delete
These are the pictures of the mechanisms used to synchronize objects: ##### Sync object
##### Remove object

You can find more information by visiting the [Properties attributes page](https://bookstack.soffid.com/books/connectors/page/json-rest-web-services-connector-properties).

#### Attributes You can customize attribute mappings, you only need to select system objects and the Soffid objects related, manage their attributes, and make either inbound and outbound attribute mappings. You may map the attributes of the target system with the Soffid available attributes. - For the target system attributes is required to be access to its specification. - For the Soffid attributes, you may follow the next link.

For more information about how you may configure attribute mapping, see the following link: [Soffid Attribute Mapping Reference](https://bookstack.soffid.com/link/72#bkmrk-soffid-attributes)

For instance: As an example, below is how JSON connector will look like in order to manage JIRA accounts: [![image-1658843268020.png](https://bookstack.soffid.com/uploads/images/gallery/2022-07/scaled-1680-/image-1658843268020.png)](https://bookstack.soffid.com/uploads/images/gallery/2022-07/image-1658843268020.png) #### Triggers You can define BeanShell scripts that will be triggered when data is loaded into the target system (outgoing triggers). The trigger result will be a boolean value, true to continue or false to stop. Triggers can be used to validate or perform a specific action just before performing an operation or just after performing an operation on target objects.

To view some examples, visit the [Outgoing triggers examples page](https://bookstack.soffid.com/books/connectors/page/outgoing-triggers-examples "Outgoing triggers examples").