GithubHelp home page GithubHelp logo

ecommerce-springboot-hateoas's Introduction

ecommerce-springboot-rest

1. 개요

Product와 Category를 관리하는 Rest API를 구현한다.

2. 기술 스택

Spring Boot + Spring Data JPA + Spring Security + Spring Rest with HATEOAS

3. 가정

  • Product는 다수개의 Category에 속할 수 있다. 즉, 전동 칫솔은 "Electronics" 와 "Beauty & Personal Care" 카테고리에 속할 수 있다.

  • Category는 다수개의 SubCategory를 가질 수 있다. 예를 들어 “Electronics” category는 'Audio & Video Components', 'Camera & Photo', ‘Computers’ SubCategory를 가질 수 있다.

4. Rest API

Products:

1) Product CRUD ( URL: /api/products), ProductController.java

URL 설명
GET, /api/products 모든 product를 조회한다
GET, /api/products /{id} 특정 id를 가진 product를 조회한다
POST, /api/products, Body { "name": "P1", "price": 100.00 } 하나의 product를 생성한다
PUT, /api/products/{id}, Body { "name": "P1", "price": 100.00 } 하나의 product를 수정한다.
DELETE, /api/products/{id} 특정 id를 가진 product를 삭제한다

Categories:

1) Category CRUD ( URL: /api/categories), CategoryController.java

URL 설명
GET, /api/categories 모든 category를 조회한다
GET, /api/categories /{id} 특정 id를 가진 category를 조회한다
POST, /api/categories Body { "name": "C1" } 하나의 category를 생성한다
PUT, /api/categories /{id} Body { "name": "C1" } 하나의 category를 수정한다.
DELETE, /api/categories/{id} 특정 id를 가진 category를 삭제한다

2) Add / Remove child categories CategorySubcategoriesController.java

URL 설명
GET, /api/categories/{parentid}/subcategories 특정 parentid를 가진 카테고리에 속한 자식카테고리를 조회한다
POST, /api/categories/{parentid}/subcategories/{childid} Parent category와 child category를 연결한다
DELETE, /api/categories/{parentid}/subcategories/{childid} Parent category에서 child category를 제거한다

3) Link / Unlink products, CategoryProductsController.java

URL 설명
GET, /api/categories/{categoryid}/products 특정 id를 가진 category에 속한 모든 product를 조회한다
POST, /api/categories/{categoryid}/products/{productid} Product를 category에 넣는다
DELETE, /api/categories/{categoryid}/products/{productid} Product를 category에서 제거한다

5. 데이터 베이스 초기화

  1. 데이터베이스(ecommerce)를 생성한다: create database ecommerce default character set utf8 collate utf8_general_ci;
  2. 애를리케이션 실행시 data.sql에 있는 sql statement가 실행되어 초기 데이터가 저장된다

6. 실습할 Rest API

Products:

  1. Get, http://localhost:8080/api/products
  2. Get, http://localhost:8080/api/products/1
  3. Post, http://localhost:8080/api/products, id 100이 생성되는지 확인

{ "name": "삼성컴퓨터", "price": 150 } // body는 postman에서 raw, json format으로 전송

  1. Put, http://localhost:8080/api/products/100

{ "name": "LG컴퓨터", "price": 120 }

  1. Delete, http://localhost:8080/api/products/100

Category:

1) category CRUD

1-1) Get, http://localhost:8080/api/categories

1-2) Get, http://localhost:8080/api/categories/1

1-3) Post, http://localhost:8080/api/categories, id 101 카테고리 생성됨

{ "name": "스마트폰" }

1-4) Put, http://localhost:8080/api/categories/101

{ "name": "태블릿" }

1-5) Delete, http://localhost:8080/api/categories/101

2) Add / Remove child categories

2-1) Get, http://localhost:8080/api/categories/1/subcategories

2-2) subcategory를 생성한 후(id=102), category(id=1)에 연결한다

Post, http://localhost:8080/api/categories

{ "name": "스마트폰" }

Post, http://localhost:8080/api/categories/1/subcategories/102

2-3) Delete, http://localhost:8080/api/categories/1/subcategories/102

3) Link / Unlink products

3-1) Get, http://localhost:8080/api/categories/8/products

먼저 “Computer” 카테고리에 존재하는 Product조회한다

3-2) Product( id=103)를 생성한 후, “Computer” 카테고리에 연결한다(Link)

Post, , http://localhost:8080/api/products

{ "name": "LG컴퓨터", "price": 500 }

Post, http://localhost:8080/api/categories/8/products/103

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.