How to best learn how retrieve and parse JSON from an API? - json

I'm a web designer by education and I design WordPress-based websites using HTML5, CSS3 and some easy jQuery scripting. I want to learn how to handle JSON and RESTful API calls (e.g. retrieving data from Twitter's Streaming API), but don't know where to start.
Are there any Sitepoint, O'Reilly, or any other big publisher with books on this? Any superblog articles with tutorials? Any tips, suggestions? Pardon in advance for my rusty english.

If you know HTTP, you know REST, so the HTTP standard (especially the Method Definitions section). REST is just using HTTP as it was originally intended, with each URL representing a resource. Its philosophical background is explained in the Wikipedia page, and at length in the original paper.
Specifically for twitter's streaming API, consult their documentation. You can easily test HTTP queries and what they return with curl or a Python's urllib.

Related

Implement a http server with RESTful http API

I've started to learn backend development, focus on http server mainly.
But I'm really new to this, so it's a little out of focus for me, and I could really use some advice.
For example, if I try to implement something like this
A http server runs on linux/Windows
A private REST API which allows to POST a json object, plus a login mechanism, so only authorised user can do the POST.
Implement a public REST API which allows to GET the same json object
And here is my question:
Can I use Nodejs and express to implement all these? I also know little about them.
Do I need a Database to implement the login mechanism?
Is there any similar tutorial or best practise I can study from?
Regards
Ben
Yes, you can use NodeJS for this.
Not necessarily. You just need a way to authorise users. Most common is to use a database to store a username/email and password, but you could also look into using a third-party service for this, for example facebook or google
Yes, there is a lot of tutorials and especially best practices on this subject. Your question is too broad to link relevant material, but some terms you can use to google this yourself is "nodejs rest api" "rest api best practice". Passport.js is a good place to start for getting into authorising users. For REST-api, the closer you get to normal web standards, the better - Especially if other people than you are going to consume the api.
Node.js is a run-time environment/framework/platform for developing non-blocking I/O server side processes, services, or RESTful API's. You can start by learning what Node.js can do before you go on developing a login story and, and a restful endpoint here
Next if you intend to go all the way and learn full-stack web development start from here, This will guide you to learn Node.js , Express.js, Mongodb, and finally Angular.js for front-end. Good luck and happy coding
Yes, you can use Node.js and Express.js. I recomend you to read some articles about REST and TDD from this amazing blog, especialy this or this.

ASP.NET web api: documenting/specifying a service

I've been looking at asp.net Web Api, and I like the simplicity of implementing a practical web service.
However, how can I document/specify the interface of a service implemented like that? For example, is there any spec I can pass on or generate to a Java guy with no .NET background that will let him easily call and consume the service? What can I give to the javascript guy?
Ideally, I'd like the benefits of SOAP/XSD or something like it (easy to deserialize with nicely typed objects) for the java guy, while retaining a service that's callable from a web browser too (i.e. supports non-crufy JSON).
Update
It's worth noting that since I originally posted this question, I discovered ServiceStack which deals with this more naturally; supporting JSON, SOAP, and WSDL out of the box for the same service, as the client chooses. If you really want SOAP+JSON, it may be a better framework than ASP.NET Web Api.
Update March 2016
It has been a while since this was answered and the tooling for documenting any Rest API has come along a lot. We are currently evaluating Swagger 2.0 now spawning out to the the Open Api Initiative, RAML and API Blueprint.
For WebAPI projects there is a tool Swashbuckle that auto creates Swagger (Open API) format documentation.
Format for documenting a REST service:
There are some attempts at structuring and standardising the description of REST services:
Web Application Desciption Language (WADL)
Web Service Description Language 2.0 (WSDL 2.0)
I think it is fair to say neither of the two approaches above have very wide adoption, but WADL does look like a nice concise format - a quick XSLT over the top and it could be a nice human readable format. There lots of examples of WADL for some famous API's at the apigee github site here.
When trying to find a documentation format that is appropriate I tend to look for "inspiration" from others.... Apigee do a lot of research in this area and have this as documentation for one of their API's here or take a look at Facebook's social graph api here.
The examples are largely in line with the advise here
How to auto document:
Using .NET: There is a good example of auto generating a WebApi "help" page here. A logical extension of this example may be to get it outing a WADL formated version as well...
Using Java: Jersey is a tool used in the Java community to generate WADL automatically.
What to share with the other developers:
Your Javascript guy will most likely want a manual like the Facebook and apigee one; giving the dev examples of the resources, urls, response codes etc. The most important thing here will be supporting JSON as the primary content type this will be the easiest for him/her to consume and work with by far.
Your Java guy would also want the manual, but also in theory they could be given example XSD for any XML representations of the resources you send/consume (assuming they make the request as "Content-Type: appplication/xml"). This may help them build proxy classes etc. JSON to Java and .NET converters are available online and given the example resources in your manual they should simply be able to use one of these types of services to quickly create proxies. Generate Java class from JSON?.
If you absolutely must have auto discovery, auto proxy generation etc then you may need to offer a choice of both REST and SOAP (with WSDL) endpoints - relevant question here: ReST Proxy Object Generator.
You can use IApiExplorer interface and ApiExplorer class in order to create a help page for your Web Api service. This help page will describe the REST methods exposed by your service so any developer who understands how REST works will be able to use it (regardless the language). Please read below links for details and samples:
ASP.NET Web API: Introducing IApiExplorer/ApiExplorer
ASP.NET Web API: Generating a Web API help page using ApiExplorer
Documenting your ASP.Net Web API’s

Is there any publicly available RESTful services that can be used for testing

Does anyone know of any publicly available RESTful services that can be used for testing. I'm not talking about software or browsers extensions. Just an online service that I can CRUD json data with using javascript. I'm testing a JS library's rest api and there's only so much I can do with static json data.
I'm guessing there's no such thing due to what's involved but I thought I would ask.
if you just want to practice 'gets' you can use cloudant as you can sign up for free. however, there are restrictions on adding new documents from a cross domain ajax call. I recommend running one locally. I use couchDB very quick, very easy.
You can use the google feed api and pass in any rss url to test .
This may help you.
http://code.google.com/apis/feed/v1/reference.html#resultJson

Interface for databasing tweets?

I have just started a new project and step one is to go and collect a bunch of information. For this first step I need a script that takes a twitter username. The program will then grab the last five posts from the user, and place them into a database, preferably as a JSON file.
I have been looking into Twitter4J, and the Streaming API. While I feel these are both good resources that are very robust and contain a lot of functionality. I am struggling to find anything that just gives me a simple start. Ideally a step by step, get one post as text, kind of tutorial would be ideal, and then I can dive into the docs and find the modules I need and so on.
So is there any tutorials or lightweight frameworks that one may know of? I am open to any language, and any suggestions. Thanks in advance, and for taking the time to read through this!
TL;DR. Need a lightweight framework that handles twitter, or a link a beginner Twitter API tutorial.
If your interested in a good PHP framework and want an easier way to work with the Streaming API, I would highly recommend looking at the 140 server. It's a framework to start with rather then to integrate later, and it looks like your just starting out so it may be a good choice. Using the streaming API you can open up a firehose with your queries and items will be pushed to you. This definitely looks to be the right choice for your use case.
Also, since you now have the link to the server, take a look through the rest of this site. I don't think you'll find a better resource for Twitter tutorials and resources.
If your looking for something much simpler, and want to get your feet wet from the beginning with Twitter and if you've never worked with RESTful API's, take an additional look at the following.
Here is an article about integrating RESTful services with CI. Codeigniter is a nice PHP framework to start with and has a lot of resourceful documentation, The example they use in the tutorial is actually Twitter which is nice.
http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/
Here is a more general article about the Twitter RESTful API
http://www.ibm.com/developerworks/xml/library/x-twitterREST/
and finally if your going with CI, have a look at this library that will make things that much easier. Especially if your working with oAuth and such. It basically abstracts the whole twitter API (less streaming) into easy to use CI calls.
. . and if you don't want to use the streaming API, for your use case, your going to want to cache the tweets. I don't know any specifically great articles for this, but it's a pretty popular method and should be easy to search for. You do this because the API is rate limited in most cases.

How, in general, can web framework support REST style?

I would like to know, what are the ways a web framework may be suitable for designing a RESTful app, in general.
One goal is for example to provide http request routing, so they are automatically sent to appropriate controllers. From architectural point of view, web framework based on MVC pattern are more suitable for REST.
What other features of web frameworks are helpful by building apps satisfying the REST constraints?
Is there any reason why you consider certain languages(python/java) or web frameworks(django/turbogears/jersey/restlets/...) as the most applicable ones?
I think the best way for a web framework to support a RESTful style is to automatically map the different HTTP verbs (GET, POST, PUT, DELETE, etc.) to corresponding methods on its controllers/request handlers. Most modern Python web frameworks do this out of the box, with the notable exception of Django (unless I missed a dramatic change).
a) You need very flexible routing.
b) You need to be able to easily generate links that correlate to resource controllers using templates and parameters.
c) The server should help you to parse all the http headers. e.g. Authorization headers, Accept headers, language headers, cookies, etags.
d) It should support serializing and deserializing all the commonly used mime types.
e) It should help parsing parameters from incoming URLs
f) It should help resolving relative urls based on the request url and any available BaseURL.
There are few ways that a web framework can NOT support REST. Its basically written with the HTTP model in mind; so just about any web framework works. The automatic routing you mention is a common expectation, but not strictly required for REST.
I would stress the ability to directly support definition of resources. In Ruby on RAils you can define a resource through scaffolding and you get a model with controller with restful verbs implemented also with views and support for different formats and readily avalaible views and routing with ids.
Aside from that having access to HTTP and supporting principles of HTTP is what you need.
I am not experienced enough to know about support in frameworks, but it would be also nice to have support for the caching and other request options.
On the “specific software recommendation” front, I've had people recommend Apache CXF as a framework for building RESTful services with Java. It appears to be even able to simultaneously support SOAP (which happens to be very useful for helping some of our customer base adopt the software). I'm still in the experimenting-with-it stage though, so you may be able to do better.