anchor.diff:      );
   }
   ----
  -<1> Our interface need to extend `org.talend.sdk.component.api.service.http.HttpClient`
  -to be known as an http client by the component framework.
  -This interface also provides `void base(String base)` method that will let us set the base uri for the http request. In our case, it will be the Zendesk instance url.
  -<2> `@Request` annotation let us define two things. the http request path and method (`GET`, `POST`, `PUT`,...).
  -<3> At this line we have two important things. The method return type and a header param. At this point we will explain the method return
  -that is of type `Response<JsonObject>`. The `Response` object let us access
  -to the http response status code, headers, error payload and the response body that will be of type `JsonObject` here.
  -The response body will be decoded according to the content type returned by the API. The component framework provides codec for json content.
  -If you want to consume specific content type, you will need to provide your personalized codec using the `@Codec` annotation.
  -<4> We define the `Authorization` http request header that will let us provide the authorization token.
  -<5> We define another http request header to provide the content type.
  -<6> We define the query parameters using the `@Query` annotation that will provide the parameter name.
  -
  -And that all what we need to do to create our http client. No implementation is needed for the interface,
  -as it will be provided by the component framework according to what we have defined.
  -
  -TIP: This http client can be injected into a mapper or a processor to perform http requests.
  -
  -== Component Configuration
  -NOTE: For the sake of simplicity, we will use the basic authentication supported by the API.
  -
  -Let's start setting up the configuration for the basic authentication.
  -To be able to consume the Search API, we will need to provide the Zendesk instance URL, the username and the password.
  +<1> The interface needs to extend `org.talend.sdk.component.api.service.http.HttpClient` to be recognized as an HTTP client by the component framework.
  +This interface also provides the `void base(String base)` method, that allows to set the base URI for the HTTP request. In this tutorial, it is the Zendesk instance URL.
  +<2> The `@Request` annotation allows to define the HTTP request path and method (`GET`, `POST`, `PUT`, and so on).
  +<3> The method return type and a header parameter are defined. +
  +The method return type is a JSON object: `Response<JsonObject>`. The `Response` object allows to access the HTTP response status code, headers, error payload and the response body that are of the `JsonObject` type in this case. +
  +The response body is decoded according to the content type returned by the API. The component framework provides the codec to decode JSON content. +
  +If you want to consume specific content types, you need to specify your custom codec using the `@Codec` annotation.
  +<4> The `Authorization` HTTP request header allows to provide the authorization token.
  +<5> Another HTTP request header defined to provide the content type.
  +<6> Query parameters are defined using the `@Query` annotation that provides the parameter name.
  +
  +No additional implementation is needed for the interface, as it is provided by the component framework, according to what is defined above.
  +
  +TIP: This HTTP client can be injected into a mapper or a processor to perform HTTP requests.
  +
  +== Configuring the component
  +This example uses the basic authentication that supported by the API.
  +
  +=== Configuring basic authentication
  +The first step is to set up the configuration for the basic authentication.
  +To be able to consume the Search API, the Zendesk instance URL, the username and the password are needed.
   
   [source,java,indent=0,subs="verbatim,quotes,attributes",]
   ----
  
positive.code: = Create components for REST API
  :page-partial:
  
  [[tutorial-create-components-rest-api]]
  
  In this tutorial we will show how to create components that consume a REST API.
  
  As an example, we will develop an input component that will provide a search functionality for Zendesk using there
  https://developer.zendesk.com/rest_api/docs/core/search[Search API].
  
  NOTE: We use lombok. to get ride of getters, setters and constructors from our classes.
  
  TIP: You can generate a project using the components kit starter as described in
  xref:tutorial-generate-project-using-starter.adoc[this tutorial].
  
  == Http client setup
  As our input component will relay on Zendesk Search API. We will need an http client to consume it.
  
  Zendesk Search API takes the following query parameters on this endpoint `/api/v2/search.json`.
  
  * *query*     : The search query.
  * *sort_by*   : One of `updated_at`, `created_at`, `priority`, `status`, or `ticket_type`. Defaults to sorting by `relevance`.
  * *sort_order*: One of `asc` or `desc`. Defaults to `desc`.
  
  So let's create our http client according to that.
  
  Talend component kit provides a built-in service to create an easy to use http client in a declarative manner using java annotations.
  [source,java,indent=0,subs="verbatim,quotes,attributes",]
  ----
  public interface SearchClient extends HttpClient { <1>
  
negative.code:     }
  }
  ----
  <1> This configuration class provides the authentication information. Type it as `Datastore` so that it can be validated using services (similar to connection test) and used by Talend Studio or web application metadata.
  <2> `@GridLayout` defines the UI layout of this configuration.
  <3> The password is marked as `Credential` so that it is handled as sensitive data in Talend Studio and web applications. xref:tutorial-configuration-sensitive-data.adoc[Read more about sensitive data handling].
  <4> This method generates a basic authentication token using the username and the password. This token is used to authenticate the HTTP call on the Search API.
  
  The data store is now configured. It provides a basic authentication token.
  
  === Configuring the dataset
  Once the data store is configured, you can define the dataset by configuring the search query. It is that query that defines the records processed by the input component.
  [source,java,indent=0,subs="verbatim,quotes,attributes",]
  ----
  @Data
  