Web Framework) ecommerce-springboot-rest

17632 ワード

1.内容


Github URL: https://github.com/stelladream/ecommerce-springboot-rest.git
SpringBootバージョンは2.4.5で実行されます.
githubのreadme.mdと符号化.mdファイルを読み込み、プロジェクトを生成して実行します.
1)githubのreadme.mdファイルの内容の「6.実習するRest API」によると、postman
Webリクエストを送信し、応答結果を表示します.多くの応答結果があれば
もしそうなら、コア部分だけ見ても大丈夫です.
(5製品リクエスト、10カテゴリリクエスト)
2)charlieアカウント(権限をadmin、パスワードをcharliepwに設定)をdataに設定します.sqlに格納されている
すべてこの場合、パスワードはパスワードパスワードEncoderを使用してハッシュ値を格納する必要があります
やるべきだ.そして「/api/products」、HTTP GET methodの呼び出し時にログイン
WebSecurityConfigは、面を表示します.Javaファイルを変更します.そしてブラウザで
ログイン成功を表示します.
3)"/api/categories/1"HTTP Getメソッドを送信すると応答メッセージ(ハイパーメディア)
見せてください.次に、応答メッセージの結果に関連するプログラムソースを指摘し、説明する.
引く.
4)categoryから特定の製品を削除するコードを記述する.つまり.
「/api/categories/{category id}/product/{product id}は、DELETEメソッドを要求します.
製品削除コードの作成
見せてください.レスポンスステータスコード(status code)は204 No Contentです.送信に設定します.

1)Rest API Webリクエスト応答結果


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}

4) Put, http://localhost:8080/api/products/100
{「name」:「LGパソコン」、「price」:120}

5) 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)サブカテゴリ作成後(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
まず、コンピュータカテゴリに存在する製品を表示します.

3-2)製品を作成し(id=103)、コンピュータカテゴリに接続する(リンク)
Post,http://localhost:8080/api/products{"name":"LGパソコン","price":500}

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

2)charlieアカウント(権限をadmin、パスワードをcharliepwに設定)をdataに設定します.sqlに格納されます.この場合、パスワードはパスワードパスワードEncoderを使用してハッシュ値を格納する必要があります.また、「/api/products」、HTTP GETメソッドを呼び出すと、WebSecurityConfigのログイン画面が表示されます.Javaファイルを変更します.ログイン成功をブラウザに表示します.

<修正されたWebSecurityConfig。java>





<認証されたユーザのみがapi/productsにアクセスできるため、http://localhost:8080/api/productsが呼び出されるのでloginウィンドウに移動>



ログインhttp://localhost:8080/api/products
呼び出し>


commerceSpringRestApplicationTests.java
@Autowired
private PasswordEncoder encoder;

@Test
void generateHashedPassword() {
    String pwd = encoder.encode("charliepw");   //charlie계정
    System.out.println(pwd);
}
3)「/api/categories/1」、HTTP Getメソッドを送信した場合は、レスポンスメッセージ(ハイパーメディア)を表示します.次に、応答メッセージの結果に関連するプログラムソースを指摘し、説明する.

リンクも応答に一緒に送信されます.

<ソースの説明>


GET,/api/categories/{id}は,「/api/categories/1」およびHTTP Getメソッドにより特定のidを持つcategoryid=1の電子学を問い合わせる.
まずはカテゴリコントローラ.Javaファイルで@RestControllerプロンプトを使用します.次に@Request Mapping操作を使用してpathを指定します.
@RestController
@RequestMapping(path = "/api/categories")
取得カテゴリGetMethodは、pathに"/{id}"を追加し、そのidを持つカテゴリを検索します.
CategoryModelAssemblerクラスは、toModel()を提供するRepresentation ModelAssemblerインタフェースの実装チェーンSpringが提供する実装チェーンRepresentation ModelAssemblerサポートを継承します.これによりcategory EntityがCategoryモデルに変換されます.

<CategoryModelAssembler.java>


CategoryModelAssemblerクラスのtoModelメソッド
@Override
public CategoryModel toModel(Category entity) {

    CategoryModel categoryModel = instantiateModel(entity);

    categoryModel.add( linkTo(methodOn(CategoryController.class).
            retrieveCategory(entity.getId()))
            .withSelfRel() ); //self인 경우

    categoryModel.setId(entity.getId());
    categoryModel.setName(entity.getName());
リンクに加えて、他のプロパティはsetメソッドを使用してコンテンツを追加します.リンクの場合、上記のコードに示すようにadd関数でコンテンツを追加できます.
CategoryControllerクラスにあるRetrieveCategoryメソッドのAPIは、応答メッセージにself名のhrefに保存される.
このメソッドパラメータであるentityのid=1.
CategoryModelはRepresentation Modelを継承しているので、リンクを自由に追加できます.

<CategoryController.java>

@RequestMapping(path = "/{id}", method = RequestMethod.GET)
public ResponseEntity<?> retrieveCategory(@PathVariable Long id) {

    // Getting the requiring category; or throwing exception if not found
    return categoryService.getCategoryById(id) 
            .map(categoryModelAssembler::toModel)
            .map(ResponseEntity::ok)
            .orElse(ResponseEntity.notFound().build());
Mapを使用してCategoryModelAssembler:toModelを呼び出し、オプションをOptionに変更し、ResponseEntity::OKを呼び出したときにResponseEntityを作成し、bodyにCategoryModel値を入力します.orElseで値がある場合はOptionalが返され、値がない場合はResponseEntityが返されます.notFound().build()を返します.

<CategoryService.java>

  Optional<Category> getCategoryById(Long id);
ビジネスロジックを処理するモデルは、要求に応じて変化する可能性があるため、サービスはインタフェースとして組織されます.

<CategoryServiceImpl.java>


カテゴリ・サービスの実装チェーンCategoryServiceImpl
  @Override
public Optional<Category> getCategoryById(Long id) {
    return categoryRepository.findById(id);
}

Hateoasを使用してサーバとクライアントを分離し、HyperMedia=Data+linksに応答します.URLがサーバ上で変更されても、クライアントは「self」などの名前でアクセスできるので、何の影響もありません.
4)categoryから特定の製品を削除するコードを記述する.
すなわち、「/api/categories/{category id}/products/{product id},DELETEメソッドを要求すると、製品が削除されたコード(CategoryProductsController.java)を作成して結果を表示する.応答ステータスコード(status code)を204 NoContent.に設定する.

<CategoryProductsController.java>



CategoryProducts ControllerでDeleteメソッドを実装した.
製品をproductServiceのremoveCategoryメソッドでcategoryから削除します.
Productiond=1の製品はcategoryから削除されます.
この製品はcategoryid=6です.
DELETE, http://localhost:8080/api/categories/6/products/1

また、productid=1であればcategoryから削除されたことをデータベースで確認できます.