# Introduction

This sample demonstrates how you can send an HTTP request to a *Spring Integration* HTTP service while utilizing *Spring Integration*'s HTTP Path usage. This sample also uses [Spring Security][] for HTTP Basic authentication. With the HTTP Path facility, the client program can send requests with URL Variables.

The sample consists of two parts:

* Client and
* Server

The *Client* program is provided as a [JUnit][] test:

* RestHttpClientTest

This test-case can be used to test the HTTP Path usage. It uses Spring's [RestTemplate][] to assemble and send HTTP requests. The *Server*, on the other hand, is using Spring Integration's HTTP Endpoint configuration. 
The provided project itself is a web project and you can build the project using [Gradle][] and deploy the resulting 
war under `target/rest-http-*.war` to Servlet Containers such as [Jetty][] or [Apache Tomcat][]:

	$ gradlew :rest-http:build

# To run this sample

1. Deploy the project
  - If you are using [Spring Tool Suite][] (STS) and project is imported as Eclipse project in your workspace you can just execute 'Run on Server'
  - You can also run **gradlew :rest-http:build** and generate the WAR file that you can deploy to Servlet Containers
2. Run the simple JUnit Test: **org.springframework.integration.samples.rest.RestHttpClientTest**
  - You may change the URI Variable value in the test to see different results.

For example, when you give 0 as the URL Variable's value in the test, then you should see the following output from the server:

	14:01:34,337  INFO main rest.RestHttpClientTest:95 - The employee list size :2
	14:01:34,353  INFO main rest.RestHttpClientTest:101 - <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
	<EmployeeList>
	    <Employee>
	        <employeeId>1</employeeId>
	        <fname>John</fname>
	        <lname>Doe</lname>
	    </Employee>
	    <Employee>
	        <employeeId>2</employeeId>
	        <fname>Jane</fname>
	        <lname>Doe</lname>
	    </Employee>
	    <returnStatus>0</returnStatus>
	    <returnStatusMsg>Success</returnStatusMsg>
	</EmployeeList>

	14:01:34,556  INFO main rest.RestHttpClientTest:121 - Return Status :[0]
	14:01:34,556  INFO main rest.RestHttpClientTest:122 - Return Status Message :[Success]
	{"employee":[{"employeeId":1,"fname":"John","lname":"Doe"},{"employeeId":2,"fname":"Jane","lname":"Doe"}],"returnStatus":"0","returnStatusMsg":"Success"}

# The REST API

If you like to access the server's REST API yourself, please use the following URLs:

## Return All Employees

http://localhost:8080/rest-http/services/employee/0/search

## Return Specific Employees

http://localhost:8080/rest-http/services/employee/{employeeId}/search

For example using [cURL][] you can list the details for a specific user with:

	$ curl -u SPRING:spring http://localhost:8080/rest-http/services/employee/1/search

This should produce output similar to this:

	<?xml version="1.0" encoding="UTF-8" standalone="yes"?><EmployeeList><Employee><employeeId>1</employeeId><fname>John</fname><lname>Doe</lname></Employee><returnStatus>0</returnStatus><returnStatusMsg>Success</returnStatusMsg></EmployeeList>

## Security

The REST Endpoint is using [Spring Security][]. The security credentials are:

* Username: SPRING
* Password: spring

They are stored in `src/main/resources/users.properties`.

[Apache Tomcat]: https://tomcat.apache.org/
[cURL]: https://en.wikipedia.org/wiki/CURL
[Jetty]: https://www.eclipse.org/jetty/
[JUnit]: https://junit.org/
[Gradle]: https://www.gradle.org
[RestTemplate]: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html
[Spring Security]: https://www.springsource.org/spring-security
[Spring Tool Suite]: https://www.springsource.org/sts
