WCF and REST Interview Questions



What is WPF?

The Windows Presentation Foundation (WPF) is a next generation graphics platform that is part of .NET 3.0 and .NET 3.5. It allows you to build advanced user interfaces that incorporate documents, media, 2D and 3D graphics, animations, and web-like characteristics. In just 24 sessions of one hour or less, you will be able to begin effectively using WPF to solve real-world problems, developing rich user interfaces in less time than you thought possible. Using a straightforward, step-by-step approach, each lesson builds on a real-world foundation forged in both technology and business matters, allowing you to learn the essentials of WPF from the ground up

What is WCF?

Windows Communication Foundation (WCF) is an SDK for developing and deploying services on Windows. WCF provides a runtime environment for services, enabling you to expose CLR types as services, and to consume other services as CLR types.
WCF is part of .NET 3.0 and requires .NET 2.0, so it can only run on systems that support it.

Difference between WCF and Web services?

Web Services
1.It Can be accessed only over HTTP
2.It works in stateless environment
WCF
WCF is flexible because its services can be hosted in different types of applications. The following lists several common scenarios for hosting WCF services:
IIS
WAS
Self-hosting
Managed Windows Service

What are the various ways of hosting a WCF service?

Self hosting the service in his own application domain. This we have already covered in the first section. The service comes in to existence when you create the object of ServiceHost class and the service closes when you call the Close of the ServiceHost class.
Host in application domain or process provided by IIS Server.
Host in Application domain and process provided by WAS (Windows Activation Service) Server.

What is three major points in WCF?

We Should remember ABC.
Address --- Specifies the location of the service which will be like http://Myserver/MyService.Clients will use this location to communicate with our service.
Binding --- Specifies how the two paries will communicate in term of transport and encoding and protocols
Contract --- Specifies the interface between client and the server.It's a simple interface with some attribute.

What is the difference WCF and Web services?

Web services can only be invoked by HTTP (traditional webservice with .asmx). While WCF Service or a WCF component can be invoked by any protocol (like http, tcp etc.) and any transport type.
Second web services are not flexible. However, WCF Services are flexible. If you make a new version of the service then you need to just expose a new end. Therefore, services are agile and which is a very practical approach looking at the current business trends.
We develop WCF as contracts, interface, operations, and data contracts. As the developer we are more focused on the business logic services and need not worry about channel stack. WCF is a unified programming API for any kind of services so we create the service and use configuration information to set up the communication mechanism like HTTP/TCP/MSMQ etc
For more details, read http://msdn.microsoft.com/en-us/library/aa738737.aspx

What are various ways of hosting WCF Services?

There are three major ways of hosting a WCF services
• Self-hosting the service in his own application domain. This we have already covered in the first section. The service comes in to existence when you create the object of Service Host class and the service closes when you call the Close of the Service Host class.
• Host in application domain or process provided by IIS Server.
• Host in Application domain and process provided by WAS (Windows Activation Service) Server.

What was the code name for WCF?

The code name of WCF was Indigo .
WCF is a unification of .NET framework communication technologies which unites the following technologies:-
NET remoting
MSMQ
Web services
COM+

What are the main components of WCF?

The main components of WCF are
1. Service class
2. Hosting environment
3. End point

How to set the timeout property for the WCF Service client call?

The timeout property can be set for the WCF Service client call using binding tag.

<client>

<endpoint

binding = "wsHttpBinding"

bindingConfiguration = "LongTimeout"

/>

</client>

<bindings>

<wsHttpBinding>

<binding name = "LongTimeout" sendTimeout = "00:04:00"/>

</wsHttpBinding>

</bindings>

If no timeout has been specified, the default is considered as 1 minute.

How to deal with operation overloading while exposing the WCF services?

By default overload operations (methods) are not supported in WSDL based operation. However by using Name property of OperationContract attribute, we can deal with operation overloading scenario.

[ServiceContract]

interface ICalculator

{

[OperationContract(Name = "AddInt")]

int Add(int arg1,int arg2);

[OperationContract(Name = "AddDouble")]

double Add(double arg1,double arg2);

}

Notice that both method name in the above interface is same (Add), however the Name property of the OperationContract is different. In this case client proxy will have two methods with different name AddInt and AddDouble.

How to configure Reliability while communicating with WCF Services?

Reliability can be configured in the client config file by adding reliableSession under binding tag.

<system.serviceModel>

<services>

<service name = "MyService">

<endpoint

address = "net.tcp://localhost:8888/MyService"

binding = "netTcpBinding"

bindingConfiguration = "ReliableCommunication"

contract = "IMyContract"

/>

</service>

</services>

<bindings>

<netTcpBinding>

<binding name = "ReliableCommunication">

<reliableSession enabled = "true"/>

</binding>

</netTcpBinding>

</bindings>

</system.serviceModel>

Reliability is supported by following bindings only
NetTcpBinding
WSHttpBinding
WSFederationHttpBinding
WSDualHttpBinding

What is Transport and Message Reliability?

Transport reliability (such as the one offered by TCP) offers point-to-point guaranteed delivery at the network packet level, as well as guarantees the order of the packets. Transport reliability is not resilient to dropping network connections and a variety of other communication problems.
Message reliability deals with reliability at the message level independent of how many packets are required to deliver the message. Message reliability provides for end-to-end guaranteed delivery and order of messages, regardless of how many intermediaries are involved, and how many network hops are required to deliver the message from the client to the service.











































What are different elements of WCF Srevices Client configuration file?

WCF Services client configuration file contains endpoint, address, binding and contract. A sample client config file looks like

<system.serviceModel>


   <client>


      <endpoint name = "MyEndpoint"


         address  = "http://localhost:8000/MyService/"


         binding  = "wsHttpBinding"


         contract = "IMyContract"


      />


   </client>


</system.serviceModel>


 




What is Proxy and how to generate proxy for WCF Services?


The proxy is a CLR class that exposes a single CLR interface representing the service contract. The proxy provides the same operations as service's contract, but also has additional methods for managing the proxy life cycle and the connection to the service. The proxy completely encapsulates every aspect of the service: its location, its implementation technology and runtime platform, and the communication transport.

The proxy can be generated using Visual Studio by right clicking Reference and clicking on Add Service Reference. This brings up the Add Service Reference dialog box, where you need to supply the base address of the service (or a base address and a MEX URI) and the namespace to contain the proxy.


Proxy can also be generated by using SvcUtil.exe command-line utility. We need to provide SvcUtil with the HTTP-GET address or the metadata exchange endpoint address and, optionally, with a proxy filename. The default proxy filename is output.cs but you can also use the /out switch to indicate a different name.


SvcUtil http://localhost/MyService/MyService.svc /out:Proxy.cs


When we are hosting in IIS and selecting a port other than port 80 (such as port 88), we must provide that port number as part of the base address:


SvcUtil http://localhost:88/MyService/MyService.svc /out:Proxy.cs





What are contracts in WCF?


In WCF, all services expose contracts. The contract is a platform-neutral and standard way of describing what the service does.


WCF defines four types of contracts.


Service contracts


Describe which operations the client can perform on the service.


There are two types of Service Contracts.


ServiceContract - This attribute is used to define the Interface.


OperationContract - This attribute is used to define the method inside Interface.



[ServiceContract]


interface IMyContract


{


   [OperationContract]


   string MyMethod( );


}


class MyService : IMyContract


{


   public string MyMethod( )


   {


      return "Hello World";


   }


}


Data contracts


Define which data types are passed to and from the service. WCF defines implicit contracts for built-in types such as int and string, but we can easily define explicit opt-in data contracts for custom types.


There are two types of Data Contracts.


DataContract - attribute used to define the class


DataMember - attribute used to define the properties.



[DataContract]




class Contact


{


   [DataMember]


   public string FirstName;


   [DataMember]



    public string LastName;


}


If DataMember attributes are not specified for a properties in the class, that property can't be passed to-from web service.

Fault contracts


Define which errors are raised by the service, and how the service handles and propagates errors to its clients.


Message contracts


Allow the service to interact directly with messages. Message contracts can be typed or untyped, and are useful in interoperability cases and when there is an existing message format we have to comply with.





What is the address formats of the WCF transport schemas?


Address format of WCF transport schema always follow

[transport]://[machine or domain][:optional port] format.


for example:


HTTP Address Format


http://localhost:8888


the way to read the above url is


"Using HTTP, go to the machine called localhost, where on port 8888 someone is waiting"


When the port number is not specified, the default port is 80.


TCP Address Format


net.tcp://localhost:8888/MyService


When a port number is not specified, the default port is 808:


net.tcp://localhost/MyService


NOTE: Two HTTP and TCP addresses from the same host can share a port, even on the same machine.


IPC Address Format


net.pipe://localhost/MyPipe


We can only open a named pipe once per machine, and therefore it is not possible for two named pipe addresses to share a pipe name on the same machine.


MSMQ Address Format


net.msmq://localhost/private/MyService


net.msmq://localhost/MyService





How to define a service as REST based service in WCF?


WCF 3.5 provides explicit support for RESTful communication using a new binding named WebHttpBinding.


The below code shows how to expose a RESTful service



[ServiceContract]


interface IStock


{


[OperationContract]


[WebGet]


int GetStock(string StockId);


}


By adding the WebGetAttribute, we can define a service as REST based service that can be accessible using HTTP GET operation.





What is endpoint in WCF?


Every service must have Address that defines where the service resides, Contract that defines what the service does and a Binding that defines how to communicate with the service. In WCF the relationship between Address, Contract and Binding is called Endpoint.

The Endpoint is the fusion of Address, Contract and Binding.





What is binding and how many types of bindings are there in WCF?


A binding defines how an endpoint communicates to the world. A binding defines the transport (such as HTTP or TCP) and the encoding being used (such as text or binary). A binding can contain binding elements that specify details like the security mechanisms used to secure messages, or the message pattern used by an endpoint.

WCF supports nine types of bindings.


Basic binding


Offered by the BasicHttpBinding class, this is designed to expose a WCF service as a legacy ASMX web service, so that old clients can work with new services. When used by the client, this binding enables new WCF clients to work with old ASMX services.


TCP binding


Offered by the NetTcpBinding class, this uses TCP for cross-machine communication on the intranet. It supports a variety of features, including reliability, transactions, and security, and is optimized for WCF-to-WCF communication. As a result, it requires both the client and the service to use WCF.



Peer network binding


Offered by the NetPeerTcpBinding class, this uses peer networking as a transport. The peer network-enabled client and services all subscribe to the same grid and broadcast messages to it.


IPC binding


Offered by the NetNamedPipeBinding class, this uses named pipes as a transport for same-machine communication. It is the most secure binding since it cannot accept calls from outside the machine and it supports a variety of features similar to the TCP binding.


Web Service (WS) binding


Offered by the WSHttpBinding class, this uses HTTP or HTTPS for transport, and is designed to offer a variety of features such as reliability, transactions, and security over the Internet.


Federated WS binding


Offered by the WSFederationHttpBinding class, this is a specialization of the WS binding, offering support for federated security.


Duplex WS binding


Offered by the WSDualHttpBinding class, this is similar to the WS binding except it also supports bidirectional communication from the service to the client.


MSMQ binding


Offered by the NetMsmqBinding class, this uses MSMQ for transport and is designed to offer support for disconnected queued calls.




MSMQ integration binding


Offered by the MsmqIntegrationBinding class, this converts WCF messages to and from MSMQ messages, and is designed to interoperate with legacy MSMQ clients.


For WCF binding comparison, see http://www.pluralsight.com/community/blogs/aaron/archive/2007/03/22/46560.aspx





Where we can host WCF services?


Every WCF services must be hosted somewhere. There are three ways of hosting WCF services.


They are


1. IIS


2. Self Hosting


3. WAS (Windows Activation Service)


For more details see http://msdn.microsoft.com/en-us/library/bb332338.aspx





What is address in WCF and how many types of transport schemas are there in WCF?


Address is a way of letting client know that where a service is located. In WCF, every service is associated with a unique address. This contains the location of the service and transport schemas.

WCF supports following transport schemas


HTTP


TCP


Peer network


IPC (Inter-Process Communication over named pipes)


MSMQ


The sample address for above transport schema may look like


http://localhost:81


http://localhost:81/MyService


net.tcp://localhost:82/MyService


net.pipe://localhost/MyPipeService


net.msmq://localhost/private/MyMsMqService


net.msmq://localhost/MyMsMqService





What is service and client in perspective of data communication?


A service is a unit of functionality exposed to the world. The client of a service is merely the party consuming the service.



1. A user has a service with a one-way operation that includes a fault contract, and he

gets an exception when he tries to host the service. Why?



    This happens because, to return faults, the service needs some form of a two-way communication channel in place, which is not the case with one-way operations.


2. A user has a service he wants to expose on the Internet, and it needs to send notifications

out to its consumers. Would the WCF Duplex MEP be a good choice for


implementing this?



    No. The WCF Duplex MEP can be problematic to enable, even inside an enterprise.


Its implementation depends upon the service establishing a connection back to the consumer, which can’t happen in certain scenarios, such as when the client’s machine uses NAT behind a firewall. On the Internet, where you are never certain


where your consumers are coming from, this type of callback channel would rarely, if ever, work. When you factor in the security risks it could pose and the scalability concerns with the fact that callback channels require the presence of sessions


between client and service, it isn’t a feasible solution.


3. You have a Data contract specifying a Person class from which you derive a Customer class. Does a Customer object automatically have a Data contract as well?


    No. The Data contract is not inherited, so any derived class, such as the Customer class, would have to be explicitly declared as having a Data contract as well.


4. Your company has its own proprietary authentication mechanism, and you are required to authenticate every message coming into the service. What is the best way to handle using this mechanism with WCF?


    Likely the best way to handle this would be to design a Message contract that accepts these proprietary authentication tokens in the header.


5. Can you support the Rpc SOAP style by using the DataContractSerializer?


    Yes. You need only adorn your service with the DataContractFormatAttribute and explicitly set the attribute’s Style property to OperationFormatStyle.Rpc.


6. What does the “ABCs of endpoints” refer to?


    The ABCs of endpoints refers to the three required elements that comprise a service endpoint: address, binding, and contract.


7. Which standard binding could be used for a service that was designed to replace an existing ASMX Web service?


    The basicHttpBinding standard binding was designed to expose a service as if it were an ASMX Web service. This enables you to support existing clients as applications are upgraded to WCF.


8. What is the main disadvantage of using IIS to host a service?


    Using IIS to host your services means that you will not be able to support non-HTTP protocols such as TCP, named pipes, and MSMQ. You will have access to the many built-in features available with IIS such as process recycling and messagebased


activation.


9. Which file specifies the types that your service will expose in IIS?


    Service types are exposed through IIS by using the service file. This file must have an .svc file extension and should reside in the application directory for your IIS hosting application. This file will include an @ServiceHost directive, which specifies


the service name and language for the service code files. These files should be located in an App_Code subdirectory.





1.) How does Windows Communication Foundation address Service Oriented Architecture (SOA)?



WCF is the first programming model built from the ground up to provide implicit service-oriented application development, enabling developers to work autonomously and build applications that are more version independent, thereby increasing application resilience to change.



2.) How to deal with operation overloading while exposing the WCF services?



By default overload operations  are not supported in WSDL based



operation. However by using Name property of OperationContract attribute, we can deal with operation overloading scenario.



[ServiceContract]



interface Isum



{



[OperationContract(Name = "MultiplyInt")]



int Multiply(int arg1,int arg2);



[OperationContract(Name = "MultiplyDouble")]



double Multiply(double arg1,double arg2);



}



Notice that both method name in the above interface is same (Add), however the Name property of the OperationContract is different. In this case client proxy will have two methods with different name MultiplyInt and MultiplyDouble.



3.) Is Windows Communication Foundation going to interoperate with my existing applications?



The current plan is for Windows Communication Foundation to provide wire-level interoperability with WSE3, System.Messaging, .NET Enterprise Services, and ASMX applications. With minimal or no changes to code, applications built with these technologies will be able to call Windows Communication Foundation services and be callable by Windows Communication Foundation services.



clip_image002



4.) How to configure Reliability while communicating with WCF Services?



Reliability can be configured in the client config file by adding reliableSession under binding tag.



Reliability is supported by following bindings only:

NetTcpBinding


WSHttpBindingWSFederationHttpBinding


WSDualHttpBinding



5.) Will Windows Communication Foundation applications interoperate with Web services built with other technologi



es?



Yes. By default,services built with WCF will communicate with other services based on the interoperable Web services specifications. This means that WCF services will communicate with any application built on an infrastructure that also conforms to these standards. Microsoft is deeply committed to p



latform interoperability and is an active member of key standards organizations defining the latest Web services standards.



clip_image004



6.) How to set the timeout property for the WCF Service client call?



The timeout property can be set for the WCF Service client call using binding tag. If no timeout has been specified, the default is considered as 1 minute.



7.) What are the core components of an Windows Communication Foundation service?



A host environment—an application domain and process—in which the service runs;



A service class, implemented in C# or VB.NET or another CLR-based language that implements one or more methods;



One or more endpoints that allow clients to access the service.



8.) What are different elements of WCF Srevices Client configuration file?



clip_image006WCF Services client configuration file contains endpoint, address, binding and contract.





The IHttpHandler and IHttpHandlerFactory interfaces ?


The IHttpHandler interface is implemented by all the handlers. The interface consists of one property called IsReusable. The IsReusable property gets a value indicating whether another request can use the IHttpHandler instance. The method ProcessRequest() allows you to process the current request. This is the core place where all your code goes. This method receives a parameter of type HttpContext using which you can access the intrinsic objects such as Request and Response. The IHttpHandlerFactory interface consists of two methods - GetHandler and ReleaseHandler. The GetHandler() method instantiates the required HTTP handler based on some condition and returns it back to ASP.NET. The ReleaseHandler() method allows the factory to reuse an existing handler.



What is REST?



REST is a term coined by Roy Fielding in his Ph.D. dissertation [1] to describe an architecture style of networked systems. REST is an acronym standing for Representational State Transfer.



Why is it called Representational State Transfer?



The Web is comprised of resources. A resource is any item of interest.



Motivation for REST



The motivation for REST was to capture the characteristics of the Web which made the Web successful. Subsequently these characteristics are being used to guide the evolution of the Web.



REST - An Architectural Style, Not a Standard



REST is not a standard. You will not see the W3C putting out a REST specification. You will not see IBM or Microsoft or Sun selling a REST developer's toolkit. Why? Because REST is just an architectural style. You can't bottle up that style. You can only understand it, and design your Web services in that style. (Analogous to the client-server architectural style. There is no client-server standard.)



While REST is not a standard, it does use standards:




  • HTTP


  • URL


  • XML/HTML/GIF/JPEG/etc (Resource Representations)


  • text/xml, text/html, image/gif, image/jpeg, etc (MIME Types)



The Classic REST System



The Web is a REST system! Many of those Web services that you have been using these many years - book-ordering services, search services, online dictionary services, etc - are REST-based Web services. Alas, you have been using REST, building REST services and you didn't even know it.



REST is concerned with the "big picture" of the Web. It does not deal with implementation details (e.g., using Java servlets or CGI to implement a Web service). So let's look at an example of creating a Web service from the REST "big picture" perspective.



Parts Depot Web Services



Parts Depot, Inc (fictitious company) has deployed some web services to enable its customers to:




  • get a list of parts


  • get detailed information about a particular part


  • submit a Purchase Order (PO)



Let's consider how each of these services are implemented in a RESTful fashion.



Get Parts List


The web service makes available a URL to a parts list resource. For example, a client would use this URL to get the parts list:



http://www.parts-depot.com/parts


Note that "how" the web service generates the parts list is completely transparent to the client. All the client knows is that if he/she submits the above URL then a document containing the list of parts is returned. Since the implementation is transparent to clients, Parts Depot is free to modify the underlying implementation of this resource without impacting clients. This is loose coupling.



Here's the document that the client receives:



<?xml version="1.0"?>


<p:Parts xmlns:p="http://www.parts-depot.com" 


         xmlns:xlink="http://www.w3.org/1999/xlink">


      <Part id="00345" xlink:href="http://www.parts-depot.com/parts/00345"/>


      <Part id="00346" xlink:href="http://www.parts-depot.com/parts/00346"/>


      <Part id="00347" xlink:href="http://www.parts-depot.com/parts/00347"/>


      <Part id="00348" xlink:href="http://www.parts-depot.com/parts/00348"/>


</p:Parts>


[Assume that through content negotiation the service determined that the client wants the representation as XML (for machine-to-machine processing).] Note that the parts list has links to get detailed info about each part. This is a key feature of REST. The client transfers from one state to the next by examining and choosing from among the alternative URLs in the response document.



Get Detailed Part Data


The web service makes available a URL to each part resource. Example, here's how a client requests part 00345:



http://www.parts-depot.com/parts/00345


Here's the document that the client receives:



<?xml version="1.0"?>


<p:Part xmlns:p="http://www.parts-depot.com"   


        xmlns:xlink="http://www.w3.org/1999/xlink">


      <Part-ID>00345</Part-ID>


      <Name>Widget-A</Name>


      <Description>This part is used within the frap assembly</Description>


      <Specification xlink:href="http://www.parts-depot.com/parts/00345/specification"/>


      <UnitCost currency="USD">0.10</UnitCost>


      <Quantity>10</Quantity>


</p:Part>


Again observe how this data is linked to still more data - the specification for this part may be found by traversing the hyperlink. Each response document allows the client to drill down to get more detailed information.



Submit PO


The web service makes available a URL to submit a PO. The client creates a PO instance document which conforms to the PO schema that Parts Depot has designed (and publicized in a WSDL document). The client submits PO.xml as the payload of an HTTP POST.



The PO service responds to the HTTP POST with a URL to the submitted PO. Thus, the client can retrieve the PO any time thereafter (to update/edit it). The PO has become a piece of information which is shared between the client and the server. The shared information (PO) is given an address (URL) by the server and is exposed as a Web service.



Logical URLs versus Physical URLs



A resource is a conceptual entity. A representation is a concrete manifestation of the resource. This URL:



http://www.parts-depot.com/parts/00345


is a logical URL, not a physical URL. Thus, there doesn't need to be, for example, a static HTML page for each part. In fact, if there were a million parts then a million static HTML pages would not be a very attractive design.



[Implementation detail: Parts Depot could implement the service that gets detailed data about a particular part by employing a Java Servlet which parses the string after the host name, uses the part number to query the parts database, formulate the query results as XML, and then return the XML as the payload of the HTTP response.]



As a matter of style URLs should not reveal the implementation technique used. You need to be free to change your implementation without impacting clients or having misleading URLs.



REST Web Services Characteristics



Here are the characteristics of REST:




  • Client-Server: a pull-based interaction style: consuming components pull representations.


  • Stateless: each request from client to server must contain all the information necessary to understand the request, and cannot take advantage of any stored context on the server.


  • Cache: to improve network efficiency responses must be capable of being labeled as cacheable or non-cacheable.


  • Uniform interface: all resources are accessed with a generic interface (e.g., HTTP GET, POST, PUT, DELETE).


  • Named resources - the system is comprised of resources which are named using a URL.


  • Interconnected resource representations - the representations of the resources are interconnected using URLs, thereby enabling a client to progress from one state to another.


  • Layered components - intermediaries, such as proxy servers, cache servers, gateways, etc, can be inserted between clients and resources to support performance, security, etc.



Principles of REST Web Service Design



1. The key to creating Web Services in a REST network (i.e., the Web) is to identify all of the conceptual entities that you wish to expose as services. Above we saw some examples of resources: parts list, detailed part data, purchase order.



2. Create a URL to each resource. The resources should be nouns, not verbs. For example, do not use this:



http://www.parts-depot.com/parts/getPart?id=00345


Note the verb, getPart. Instead, use a noun:



http://www.parts-depot.com/parts/00345


3. Categorize your resources according to whether clients can just receive a representation of the resource, or whether clients can modify (add to) the resource. For the former, make those resources accessible using an HTTP GET. For the later, make those resources accessible using HTTP POST, PUT, and/or DELETE.



4. All resources accessible via HTTP GET should be side-effect free. That is, the resource should just return a representation of the resource. Invoking the resource should not result in modifying the resource.



5. No man/woman is an island. Likewise, no representation should be an island. In other words, put hyperlinks within resource representations to enable clients to drill down for more information, and/or to obtain related information.



6. Design to reveal data gradually. Don't reveal everything in a single response document. Provide hyperlinks to obtain more details.



7. Specify the format of response data using a schema (DTD, W3C Schema, RelaxNG, or Schematron). For those services that require a POST or PUT to it, also provide a schema to specify the format of the response.



8. Describe how your services are to be invoked using either a WSDL document, or simply an HTML document.



What is a REST Web Service



The acronym REST stands for Representational State Transfer, this basically means that each unique URL is a representation of some object. You can get the contents of that object using an HTTP GET, to delete it, you then might use a POST, PUT, or DELETE to modify the object (in practice most of the services use a POST for this).



Who's using REST?



All of Yahoo's web services use REST, including Flickr, del.icio.us API uses it, pubsub, bloglines, technorati, and both eBay, and Amazon have web services for both REST and SOAP.



Who's using SOAP?



Google seams to be consistent in implementing their web services to use SOAP, with the exception of Blogger, which uses XML-RPC. You will find SOAP web services in lots of enterprise software as well.



REST vs SOAP



As you may have noticed the companies I mentioned that are using REST api's haven't been around for very long, and their apis came out this year mostly. So REST is definitely the trendy way to create a web service, if creating web services could ever be trendy (lets face it you use soap to wash, and you rest when your tired). The main advantages of REST web services are:




  • Lightweight - not a lot of extra xml markup


  • Human Readable Results


  • Easy to build - no toolkits required



SOAP also has some advantages:




  • Easy to consume - sometimes


  • Rigid - type checking, adheres to a contract


  • Development tools



For consuming web services, its sometimes a toss up between which is easier. For instance Google's AdWords web service is really hard to consume (in CF anyways), it uses SOAP headers, and a number of other things that make it kind of difficult. On the converse, Amazon's REST web service can sometimes be tricky to parse because it can be highly nested, and the result schema can vary quite a bit based on what you search for.

You May Also Like

3 comments