In a GitHub issue titled journal_3_<cwl> filed to your 310 journal repository (e.g., journal_<cwl>), answer the questions below (example issue title: journal_3_kdchin).
IMPORTANT: If your journal is not submitted exactly this way, you will not receive credit; the ability to follow this straightforward instruction cannot be waived! The creation time / last edit for this issue must be before the submission deadline.
Your responses will be assessed by course staff for their thoroughness and completeness. Additionally, you will have a one-on-one reflection with your lab TA in the lab immediately following the journal submission deadline, based on your submitted written responses. Both the written and oral components will factor into your final bucket grade for this assignment.
This part of the journal asks you to reflect on your development process for C3, and your project overall. It covers five Learning Areas: LA0: Process, LA1: Testing, LA2: High Level Design, LA3: Low Level Design, and LA4: Construction & Refactoring.
1) The endpoints specified in the C3 specification are hardly RESTful. By answering the following questions, you will identify their shortcomings and improve their design:
1a) Which of the GET/PUT/DELETE/POST endpoints are idempotent?
1b) 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.
1c) 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.
1d) 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.
2) 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. Revisiting the code, how well do you feel your implementation would communicate its intent to other developers (i.e., given a demo of your feature, how quickly would a developer be able to locate the main code for the feature)? 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.
3) Name at least two design patterns (in addition to Facade) that would be appropriate to apply to your project. For one pattern, 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).
4) At this point, you have completed a full-stack application that could be deployed to help members of the UBC community gain insights about rooms and past sections. Seeing where your project ended up, what are three things that you would do differently and what are three things that you would do the same? These could be related to your process, your implementation, or any other factors related to the project. What are some ways that you could apply these observations to your next project?
5) 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?