REST stands for Representational State Transfer. In RESTful systems, servers expose resources using a URI, and clients access these resources using the four HTTP verbs
GET: used exclusively to retrieve data
DELETE: used for deleting resources
PUT: used to add or change a resource
POST: used to modify and update a resource
In this example, we will develop a REST Service with Xml and Json responses, using WCF, and will make the whole circuit to the call
DELETE: used for deleting resources
PUT: used to add or change a resource
POST: used to modify and update a resource
The first step is beginning a new WCF Application. This is the implementation of the interface with the definition of the service contract
namespace RestWCFService
{
[ServiceContract]
public interface IRestService
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "getXml/{id}")]
string XmlElement(string id);
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "getJson/{id}")]
string JsonElement(string id);
}
}
The next step is implementing the service contract
public class RestService : IRestService
{
public string XmlElement(string atomicSymbol)
{
return getElement(atomicSymbol);
}
public string JsonElement(string atomicSymbol)
{
return getElement(atomicSymbol);
}
private string getElement(string aSymbol)
{
Dictionary<string, string> Elements = getElementsTable();
if (Elements.Keys.Contains(aSymbol))
return "the element is " + Elements[aSymbol];
else
return "there is no match for " + aSymbol;
}
}
Now we have to set up the web.config file, changing the next sections:
<services>
<service name="RestWCFService.RestService" behaviorConfiguration="ServiceBehavior">
<endpoint binding="webHttpBinding" contract="RestWCFService.IRestService"
behaviorConfiguration="web">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false
and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp helpEnabled="true" faultExceptionEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
- The 'services' section will point to our service contract definition, and the 'behaviors' section will enable the http get method
Now we publish the service and check it from the browser
http://localhost:9479/RestService.svc/getXml/O
http://localhost:9479/RestService.svc/getJson/K
To call this service from the client layer we can make use of jQuery Ajax, the code is the next
function getChemical(atomicSymbol) {
$.ajax({
url: "http://localhost:9479/RestService.svc/getJson/" + atomicSymbol,
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {},
processdata: true,
success: function (response) {
var element = response.JsonElementResult;
$('#lblElement').html(element);
},
error: function (e) {
alert(e.status + ". " + e.statusText);
}
});
}
<METHOD SOFTWARE © 2013>