Final Project (Spring 2019)

Contributors: Conner Swenberg

Due Date: Sunday 5/10, 11:59pm

Introduction

Throughout the course, you have practiced building backends to fulfill some predefined API specification. Know that you have experience constructing routes, designing a database, and deploying application code, you are challenged to create a backend completely of your own design.

Traditionally, we have brought students in all of our courses together to build a fully functional application. Unfortunately, this semester will miss out on that opportunity, but you will still experience the same level of challenge.

This assignment is worth 30 points and is mostly graded on completion. We want you to demonstrate your new skills while having fun designing a new kind of application.

There are many extra credit opportunities as well which draw from previous challenges in the course. Additionally, there are 3 challenge competitions for fun and will not count towards extra credit, just pride.

Team Requirements

This will be a partner project, but those who wish to roll solo can do that as well. Groups of 3 or more are not allowed.

Collaborating on a codebase is difficult without a tool to help you. We will show you how to use Git, an industry standard for collaborating on software. We strongly recommend students to share responsibility in designing and coding in all parts of the project (i.e. routes, database, deployment) and intend more for this project to be like pair-programming.

Project Requirements

All of the following are requirements for the project and will be graded on a complete/incomplete basis. We believe each is important for your development and breadth of experience.

1. GitHub Repository

You will not be submitting code on CMS for this assignment; you will instead make a public Github repository and submit the link. Even those who are doing the project solo will be required to make a Github repository; those who collaborate will only need to have one person create the repository to work on.

We also recommend you make your repository on a traditional public account versus Cornell's private enterprise option so that you can more easily share this project with recruiters and anyone else who might want to look!

2. Database

You have been exposed to both the sqlite3 and SQLAlchemy packages for designing database tables and hopefully notice the many benefits of using an ORM. You are required to use SQLAlchemy to build at least one one-to-many relationship and at least one many-to-many relationship. Additionally, you are required to implement some form of nested serialization on related fields (like how we did in PA4).

Additionally you must make your implementation meaningfully different than applications we have built in the assignments so far. This means if you want to build an app overlapping with a to-do, forum, payments, or course management functionality, you should first check with the course instructors to make sure your application will be challenging you enough to design something new. If you build a to-do, forum, payments, or course management application without talking to us first, you risk getting a zero on the final project.

3. Routes

You have built some set of routes in each of the first four assignments and should be accustomed to common design patterns. You must implement at least one route for each operation archetype: create, retrieve, update, delete (CRUD).

We encourage you to use many of the abstractions shown throughout the course for clean code. For example, the use of a DAO is encouraged for your routes, but not an official requirement.

4. Deployment

You have learned how to containerize application code, ssh into a cloud server, and run your application accessible from a public IP. You must containerize your application with Docker and provide us a public server IP to interact with your application.

You should have more than enough credits to keep your server running for over a month so do not take your application down until we have submitted your grade for the final project.

5. API Specification & Documentation

We want you to document how people should interact with your application with an API specification (like we have been providing for you on each assignment). We recommend using markdown for easy templating and supported by Github with .md files. Just add an api.md file or describe your routes within the README.md file made by default with a new git repository. Writing a clear API specification is also important for helping us grade your final project when trying to interact with your application ourselves with Postman to test it.

Feel free to use our styling for API specification or think of your own way to convey the essential information. Additionally you can try popular tools like Swagger and Open API for documentation.

Extra Credit Challenges

If you're on the edge of not passing this course or just want to have fun learning something new, we recommend exploring the following challenges. Successful completion of each will be worth 3 points of extra credit (equivalent to a Tier III challenge).

1. Draw data from an external API

For the context of your application, you may want to populate your database with information on some different service. Your challenge is to integrate with some other backend and transform its data into your own application.

2. Integrate with a communication API

For many applications, automating communication with users and other parties is a huge value-add. In previous assignments we offered integrating with SendGrid's email API as a Tier III challenge for example.

3. Support raw file storage

Many applications demand some form of media that needs to be managed by the backend (i.e. images, video, audio, etc.). In PA4 we offered integrating with Amazon Web Services S3 micro-service as a Tier III challenge. Google Cloud also has its own version called "Cloud Storage".

4. Add user authentication

Applications that are serious about professional use need some authentication system to preserve information security. Chapter 7 covers many authentication schemes for you to draw inspiration from.

Competition Challenges

We want to celebrate the amazing applications you will build with some fun competition. These challenges will not be worth any extra credit or official prize and there will likely be many fantastic backends that do not get an award due to the number of submissions. Each group is capped at winning only one challenge.

1. Best Documentation

We cannot understate the value of high quality documentation which can include API specification, comments within code, and the styling/naming/layout of code in general. Anything that contributes to the ease for someone new to understand your application at any level ranging from high and abstract to low and precise is a marking of a seasoned developer.

This award will go to whoever demonstrates the best documentation standards and code cleanliness.

2. Best Application Design

While we did not deeply discuss the best design principles for applications, we subtly dropped many tips throughout the course. Pretty much all of the design patterns taught in this course apply to all sorts of applications and we want to see how you apply your knowledge to a more complex application than our boilerplate examples.

This award will go to whoever demonstrates quality database design, choice of route interfaces all in the context of a creative application.

3. Most Creative Application

Although there was no app to go with your backend this semester, we still love to see backends that envision a greater idea to fulfill.

This award will go to whoever demonstrates a refreshing idea that serves not only a need in the world but is also creative!

4. Best Security

Security is one of the most important aspects of backend, so much that DevOps is becoming DevSecOps. Developers should always strive to think about the best ways to secure their applications, and taking advantage of our authorization lectures is a good step forward!

This award will go to whoever takes advantage of features of our authentication lecture!

5. Best Overall Backend

Combining all of the aspects of the previous three challenges, the Best Overall Backend will demonstrate high levels of achievement in each category.

Last updated