Interacting with RESTful API's via Javascript?

2019-04-26 18:15发布

问题:

to start off, I know C++, C#, Python, some Ruby, and basic Javascript. Anyway, my question revolves around how to interact with RESTful API's via Javascript. I haven't been able to find any good examples on various websites, and so I've come here.

So my basic question is: How do I interact with RESTful API's via JS? And where can I find out how to implement OAuth in JS? I know how to get my keys and such, just not how to actually code them in.

Below is an example of a twitter API status update run from my MAC terminal with curl:

curl -u username:password 
-d "my tweet" 
http://api.twitter.com/1/statuses/update.json

How can I implement this in Javascript (preferably with OAuth authentication)? This would at least start me going in the right direction.

Thanks so much!!

回答1:

The problem is that you will need to use AJAX to query the remote REST API, and AJAX is only allowed to query resources on the same domain as the page. So, a request to api.twitter.com will fail because it is on a different domain than your server.

To correct this you will need to code your server to make the request to twitter. You can however create your own AJAX stubs that will accept data directly from your page, and then build / send requests to twitter server-side using data supplied by your client.



回答2:

Generally Justin's approach is the correct one, however if you must have your client script interact with the REST service then you can do it with JsonP. that's JSON data wrapped in a function call.

see this page how to do it http://www.ibm.com/developerworks/library/wa-aj-jsonp1/



回答3:

OAuth version 1.0 in JavaScript is a bad idea because you need to expose your application's secret key, by doing so you may be allowing anyone else to impersonate your application. OAuth 1.0 was intended for use with a server under your control. So your users can send their tokens to your server and then you fire off the request to twitter on their behalf.

OAuth 2.0 solves this though twitter does not support it yet.

If you really want OAuth 1.0 you use my plugin: https://github.com/jpillora/jquery.rest and also make the change specified in this GitHub issue