Here is the first set of problems, comprising two entries. You can innovate a lot on both of them!
Problem 1: The Cloud Service
Using your favorite programming language, you have to design a cloud service and build an application that will use this service. Tip: Facebook is a very popular cloud service.
The cloud service will inform its end-users that some data is updated and should be retrieved. The users must subscribe to data objects in order to be notified when such objects change. Data is to be stored on multiple servers, the interface dedicated to the end users will also handled by many servers. To ensure availability, data will be replicated asynchronously between all these servers (tip: you might not have to replicate everything on all servers…). You have billions of objects with millions of subscriptions. The subscription service must be very efficient, reliable and should provide quick updates (in seconds).
The end-users are applications available for mobile devices, web applications, desktops. Applications will use an API to connect to the cloud service over the network, to subscribe/unsubscribe to the service in order to be notified of data changes and to notify the service when data changes occur.
This cloud service will inform registered applications that an update was issued; however, it will not provide data applications. Data can be interrogated using a different service (this is not the purpose of this task). Applications must retrieve the latest version of data after being notified.
In order to improve the scalability and reliability of the solution, client applications should be able to drive the recovery in case of failure (communication, crashes, etc).
What You Have to Do:
- Describe the architecture and build the object model.
- Provide a client API (the documentation needed by any developer that will try to use this API).
- Explain the scalability, performance, and the robustness of the solution.
- Build a prototype for an end-user application and for the client library. Make sure you describe in a document what the application is required to do.
- The Client API may be a library that the prototype application can use.
- You can use a NoSQL database for the datastorage or you can build it in memory.
- Make sure you guard against service unavailability.
- You can optimize things (e.g. the service can skip the update for the client who made the data change)
- The applications can use any protocol to communicate with the service. HTTP may be a good choice.
- You must have a mechanism for detecting connectivity, that is easier to handle at the server level.
Problem 2: Test a REST API
Imagine you are testing a REST API (the Facebook one is a good example). The API has been proposed by the development group and unfortunately it’s the first time you see it.
What You Have to Do:
Prepare a document that describes:
- The characteristics of a good API and how to identify them on the tested API
- Performance considerations
- Security considerations
- Functional testing procedure – how do you automate it?
After you document your testing requirements at a very high level, build a prototype to automatically test (in any way – functional, performance, volume, etc) a REST API. You can use any programming language you wish.
- A good API must be easily understood by developers
- There are tools able to test how good an API is
- There are standards for REST services
- There are things not mentioned here that make an API good. Make sure that you add them to your solution.
We wish you a very nice weekend and a great race! 🙂