Skip to content

Latest commit

 

History

History
155 lines (118 loc) · 5.52 KB

File metadata and controls

155 lines (118 loc) · 5.52 KB

Backend

Your task is to build an API and database for the VUTTR (Very Useful Tools to Remember) application. The application is a simple repository for managing tools with their respective names, links, descriptions and tags.

The application can be built using any language, database, frameworks, libraries and tools of your choice (Ex: Node + Express + Mongoose + MongoDB, PHP + Lumen + RedBean + PostgreSQL, etc). Despite this, the most common stack for squads here at BossaBox is Node.js, followed by PHP. Ruby is uncommon, but appears in rare cases.

The API must be documented using the format API Blueprint or Swagger.

What will be evaluated

We want to assess your ability to develop and document a backend for an application. Will be evaluated:

  • Well written and clean code;
  • What tools were used, how and why, in addition to your knowledge of them;
  • Your knowledge of databases, HTTP requests, REST APIs, etc;
  • Your ability to commit to what was provided;
  • Your ability to document your part of the application.

The minimum required

  • An application containing a simple real API, without authentication, that meets the requirements described below, making requests to a database for persistence;
  • README.md containing basic information about the project and how to run it;
  • API Blueprint or Swagger of the application.

Bonus

The following items are not mandatory, but will add more value to your work (those in bold are more meaningful to us)

  • Use of external tools that facilitate your work;
  • Special care with optimization, patterns, among others;
  • Migrations or script for configuring the used database;
  • Tests;
  • Containerization of the application;
  • Authentication and authorization (OAuth, JWT);
  • Suggestions about the challenge based on some arguments.

Requirements

0: The API must respond on port 3000

1: There must be a route to list all registered tools

GET /tools

Response:

[
	{
		id: 1,
		title: "Notion",
		link: "https://notion.so",
		description:
			"All in one tool to organize teams and ideas. Write, plan, collaborate, and get organized. ",
		tags: ["organization", "planning", "collaboration", "writing", "calendar"],
	},
	{
		id: 2,
		title: "json-server",
		link: "https://github.com/typicode/json-server",
		description:
			"Fake REST API based on a json schema. Useful for mocking and creating APIs for front-end devs to consume in coding challenges.",
		tags: ["api", "json", "schema", "node", "github", "rest"],
	},
	{
		id: 3,
		title: "fastify",
		link: "https://www.fastify.io/",
		description:
			"Extremely fast and simple, low-overhead web framework for NodeJS. Supports HTTP2.",
		tags: ["web", "framework", "node", "http2", "https", "localhost"],
	},
];

2: It should be possible to filter tools using a search by tag

GET /tools?tag=node (node is the tag being fetched in this example)

Response:

[
	{
		id: 2,
		title: "json-server",
		link: "https://github.com/typicode/json-server",
		description:
			"Fake REST API based on a json schema. Useful for mocking and creating APIs for front-end devs to consume in coding challenges.",
		tags: ["api", "json", "schema", "node", "github", "rest"],
	},
	{
		id: 3,
		title: "fastify",
		link: "https://www.fastify.io/",
		description:
			"Extremely fast and simple, low-overhead web framework for NodeJS. Supports HTTP2.",
		tags: ["web", "framework", "node", "http2", "https", "localhost"],
	},
];

3: There must be a route to register a new tool

The body of the request must contain the information of the tool to be registered, without the ID (automatically generated by the server). The response, in case of success, must be the same object, with its new generated ID.

POST /tools Content-Type: application/json

{
     "title": "hotel",
     "link": "https://github.com/typicode/hotel",
     "description": "Local app manager. Start apps within your browser, developer tool with local .localhost domain and https out of the box.",
     "tags":["node", "organizing", "webapps", "domain", "developer", "https", "proxy"]
}

Response:

Status: 201 Created

content-Type: application/json

{
     "title": "hotel",
     "link": "https://github.com/typicode/hotel",
     "description": "Local app manager. Start apps within your browser, developer tool with local .localhost domain and https out of the box.",
     "tags":["node", "organizing", "webapps", "domain", "developer", "https", "proxy"],
     "id":5
}

4: User must be able to remove a tool by ID

DELETE /tools/:id

Response:

Status: 200 OK

{
}

Acceptance Criteria

  • The API must be real and written by you. Tools that create APIs automatically (Loopback, json-server, etc) are not supported;
  • All the above requirements must be met, following the established route pattern;
  • There must be an API Blueprint or OpenAPI (formerly Swagger) document describing your API;
  • If you deem it necessary, suitable or want to make the application more complete (bonus!) you can add other routes, methods, means of authentication with users, etc.

At the end of the challenge, you must schedule a call with Eduardo Koller (BossaBox Technology Director) to talk about what you've built. The connection will take place via Hangouts, and the link will be present in the event invitation.