Skip to content

Le but de ce test est de réaliser une simple API HTTP gérant une base de données Postgres contenant des artistes Spotify ainsi que leurs tracks.

License

Notifications You must be signed in to change notification settings

N3ll3/api-http-golang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API Golang

Le but de cette APIest de réaliser une simple API HTTP gérant une base de données Postgres contenant des artistes Spotify ainsi que leurs tracks.

BDD

  CREATE DOMAIN "spotify_id" AS character varying(22)
  COLLATE "default"
  CONSTRAINT check_spotify_id_format CHECK (VALUE::text ~* '^[0-9azA-Z]{22}$'::text);
  CREATE TABLE spotify_artist (
  id spotify_id NOT NULL,
  name varchar(255) NOT NULL,
  PRIMARY KEY (id)
  );
  CREATE TABLE spotify_track (
  id spotify_id NOT NULL,
  artist_id spotify_id NOT NULL,
  name varchar(255) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (artist_id) REFERENCES spotify_artist(id)
)

Specs API

Configuration

  • L'API est configurée avec des variables d'environnement sur la base de template.env

  • Structure des dossiers

├── app
│   ├── routes.go
│
├── error
│   └── apiError.go
│
├── handler
│   └── artistHandlers.go
│
├── middleware
│   └── apiKeyMiddleware.go
│
├── config
│   └── .env.template
│
├── domain
│   ├── artist.go
│
├── .gitignore
├── ca.pem
├── go.mod
├── go.sum
├── LICENSE
├── main.go
├── README.md
├── .env

Sécurité

Toutes les routes devront être protégées par un middleware checkant l'api key présent dans le request header Api-Key .

La valeur de cette api key doit être hashée en sha256 et ce hash présent dans la variable d'env API_KEY_SHA256 .

Routes

L'api implemente 4 routes:

  • POST /artist A pour but d'inscrire un nouvel artist en DB. Elle accepte comme body JSON:
{ "id": "6olE6TJLqED3rqDCT0FyPh", "name": "Nirvana" }
  • POST /artist/:id/track A pour but d'inscrire une nouvelle track en DB. Elle accepte comme body JSON:
{ "id": "5muVpPu8Fj9fXfDbbqDdrZ", "name": "Bleach" }
  • GET /artists/

Retournes la liste de tout les artiste en db

Format de réponses:

[
  {
    "id": "6olE6TJLqED3rqDCT0FyPh",
    "name": "Nirvana",
    "tracks": [
      {
      "id": "5muVpPu8Fj9fXfDbbqDdrZ",
      "name": "Bleach"
      }, 
    ...]
}, ...]
  • POST /artist/url

Qui fait pareil que POST /artist/ mais qui prend en body

{ 
  "spotify_url": "https://open.spotify.com/artist 6olE6TJLqED3rqDCT0FyPh?si=3fe863c0438a4593"
 } 

et va fetch le name directement depuis l'url.

About

Le but de ce test est de réaliser une simple API HTTP gérant une base de données Postgres contenant des artistes Spotify ainsi que leurs tracks.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages