Proxy the right way to go for external REST Api?

ajax, json, rest

Solution

There are three ways to do this:

1. JSONP

This is accepted by many popular APIs and frameworks. JQuery makes it easy. I would recommend this.

2. Proxy

Works pretty much as you described. Adds an extra step and server code and server load for you. However, it does allow you to filter or otherwise manipulate the results before sending them to the client.

3. Rely Access-Control-Allow-Origin

This is a header that the server can set to allow you to read json directly from their server even though you aren't on the same domain. This eliminates the need for the jsonp hack, but it requires the the server be setup to support it and it requires a web browser that supports it.

Access-Control-Allow-Origin is supported in:

- IE8+

- Firefox 3.6+

- Safari 4.0+

- Chrome 6+

- iOS Safari 3.2+

- Android browser 2.1+

If you need to support IE7, then this option isn't for you.

Problem

We have a need to consume an external REST Api and dynamically update content on our website and have ran into the age old problem of cross site scripting and Ajax. I've read up on JSONP however I don't want to go down that route in a million years as it seems like really a rather dirty hack. As a solution to this issue is it "right" and "proper" to have a local service that acts as a proxy for any requests to an external Api? So on the client there would be an Ajax call to `../RestProxy/MakeRequest` passing it the details of the request it needs to make to the external api, it performs the request and returns anything passed back. Any thoughts would be appreciated.

Original source