Question 1: RESTful APIs
The endpoints specified in the C3 specification are hardly RESTful. By answering the following questions, you will identify their shortcomings and improve their design:
Which of the GET/PUT/DELETE/POST endpoints are idempotent?
For the PUT endpoint, the dataset kind is specified in the path which seems strange since it is not related to referencing a resource. Provide at least two alternative mechanisms, supported by the HTTP protocol, that would enable a client to specify the dataset kind.
Connectedness is a key property necessary for an API to be considered RESTful. Describe at least three changes to the endpoint responses that would improve their connectedness.
The insights provided by your application have proven to be extremely popular with your users and now they want a feature that allows them to revisit their most recent previous insight. Your partner suggests that the server could track the actions that the user performs on the frontend and expose the most recent insight through the endpoint GET /previousInsight. Explain why this approach is not RESTful by describing at least two properties this design choice violates and at least one drawback/challenge of this design. Describe an alternative approach (or approaches) that would enable users to revisit previous insights in a RESTful way.
Question 2: Frontend challenges
What was the biggest challenge you encountered implementing the frontend? Describe one area or feature of your frontend you are particularly proud of and link to the source code. What approach(es) did you use to test your frontend? How does this compare with testing the backend? Describe at least three benefits and/or drawbacks for each of your frontend and backend testing approaches.
Question 3: Applying design patterns [Optional; recommended practice]
Name at least a design pattern (in addition to Facade) that would be appropriate to apply to your project. Explain your rationale, including a description of how you would apply the pattern and the code smells and principle violations that it would improve. If you already applied a design pattern, name the pattern and describe what prompted you to apply it and provide details about the implementation (i.e., the classes implementing the pattern).
Question 4: Project reflection [Optional]
The project required acquiring and applying a diverse set of new skills to implement the project specification on schedule with firm deadlines. Take a moment to reflect on the technical and non-technical skills that you gained while meeting this demanding challenge. Describe at least three skills that you acquired, detailing how you acquired them, why you think they are significant, and what impact they will have on future projects that you work on. What skills do you feel have started to emerge but may still require more time to cultivate? Overall, do you think your experience completing the project was worthwhile? Why or why not?