REST is an overloaded, and thus misunderstood term in architectural circles these days. This course attempts to clear up some of the misunderstandings about REST as well as provide a more practical approach for designing RESTful solutions - both clients and services. Additionally, the course looks at REST from the perspective of the cloud and describes how REST is well-suited to meet the demands that the cloud brings to bear on a modern architecture.
Deriving REST: Constraints In the first module, we set the stage by establishing some of the reasons that would make REST an appealing choice in designing a distributed application. We also established the very high level definition for REST as an architectural style and then compare and contrast that REST to a few other styles as well as implementation technologies. In this module, we'll dive deeper into the RESTful definition. The goal of which is that you can understand how it is that REST is able to achieve the properties that we discussed in the previous module. The way that we'll accomplish this goal will be to firstly examine the approach used in defining REST. We'll then walk through each aspect of the definition so at the conclusion of the module you should understand the method for defining REST, its definition, and how its definition yields the properties or benefits that we discussed earlier.
Elements of RESTful Architecture In the last module, we spent a lot of time looking at the constraints that make up the definition of REST. In this module, we're going to pay special attention to one of those constraints, the uniform interface and we'll see how it provides the key architectural elements that we'll use in the process of designing our own RESTful systems. Like I mentioned, the primary focus of this module will be on the additional constraints that make up the uniform interface. You can see those covered in bullet points 2 through 5. However, we're going to spend a few minutes upfront talking about two important elements that are used throughout the discussion. In fact, you've probably already heard them mentioned in the last module. Those are connectors and components and they describe how various pieces of a distributed architecture are organized and relate to each other via the uniform interface.
Designing RESTful Services Starting in this module we're going to shift the focus from talking about the definition and theory of REST to actually designing a sample RESTful system. This module will focus on designing a RESTful service while the next module will focus on designing a RESTful client. Also while we won't be showing much code in either module, the sample that I'll be describing is publicly available. You can find a link to the project in the references section. This module is broken out into basically two parts. First we'll introduce a framework for thinking about RESTful design and see how great examples of REST are all around us in the real world. We'll then introduce a sample bug tracking application and spend the remainder of the module walking through the process of designing the service.
Designing RESTful Clients After the last module you hopefully now have an approach that you can try out for designing and building RESTful services. However, as you've also seen throughout this course, REST is all about describing the complete network interactions between clients and servers. Since the system made up of just one component would be a pretty boring system. So in this module we're going to talk about some strategies for designing and building RESTful clients. Now, the format for this module may feel a bit looser than in the previous modules. This is because in my opinion the process for designing RESTful clients is a little bit more open then it is for services. And this is because there is much greater diversity in the number and types of clients than there are for services. So this module will be structured into basically three sections. First we'll go through some of the challenges that can make RESTful clients more difficult to design and build then clients in some other architectural styles. We'll also revisit the benefits of REST to see why overcoming those challenges might be worth it. Next, I'll present an approach that you can follow in designing a RESTful client and we'll walk through an example where we design part of a command line client for the bug tracking service that we designed in the previous module. Finally we'll look at the key principal to keep in mind when designing a RESTful client, remembering the contract between client and server. We'll review the constraints that make up the uniform interface and I'll give some practical examples for how you can use some of the related data elements in designing your clients.
REST and the Cloud In this last module, we're going to take a look at the cloud and make the case for REST as integral part of cloud-based architecture. This will be a shorter module than the others as the purpose here is a bit different. Previous modules were intended more to explain concepts or provide design guidance for restful systems. This module, by contrast, will attempt to make some connections between what you've hopefully learned about REST and the emerging world of cloud computing. In examining REST in the context of cloud computing, we'll start out by taking a looking at some of the goals of the cloud or at the very least, some of the advertised benefits of moving to the cloud. We'll then look at some of the architectural challenges that are inherent in building cloud applications, and we'll see how many of these challenges are really just real-world examples of many of the fallacies of distributed computing that we talked about back in module two. As we go through many of these, my hope is that you will already be making the connections between the properties that REST yields and how those properties address many of the challenges that are inherent in creating a good cloud-based architecture. Regardless, we'll then lineup the characteristics of a good cloud architecture with the RESTful constraints that help to create those characteristics. We'll conclude this module with a little envisioning exercise. I'll tell you about some of the opportunities I've been exploring for optimizing cloud-based applications by taking advantage of the RESTful constraints and I'll close with a challenge for you to do the same. I'll then spend just a couple of minutes reviewing all that we've gone over in this course, as we've covered quite a bit of ground.