🌀 WebAPI와 REST 서비스
지난 시간에는 REST의 개념과 활용을 통해 CRUD 중 R을 맡고 있는 Read에 대해서 구현하고 학습해보았다. 또한 수동으로 데이터를 DB에 넣어주고 Postman 툴을 사용하여 수동으로 넣어준 데이터를 직접 작성한 Read 코드로 데이터를 조회하였다. 이번 시간에는 CRUD의 나머지 부분을 마저 구현하는 시간을 가져보도록 한다.
🐊 WebApi #3
오늘은 이전 시간에 이어서 REST의 나머지 부분인 C/U/D 부분을 만들어주도록 하자. Create부터 만들어주도록 하자. Create의 경우 POST 메서드와 Body에 데이터를 넣어준다고 하였으므로 아래와 같이 코드를 작성해준다.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SharedData.Models;
using WebApi.Data;
namespace WebApi.Controllers
{
// Create
// POST
// /api/ranking
// → 아이템 생성 요청 (Body에 실제 정보 담아서 보냄)
[Route("api/[controller]")]
[ApiController]
public class RankingController : ControllerBase
{
ApplicationDbContext _context;
public RankingController(ApplicationDbContext context)
{
_context = context;
}
// Create
[HttpPost]
public GameResult AddGameResult([FromBody]GameResult gameResult)
{
_context.GameResults.Add(gameResult);
_context.SaveChanges();
return gameResult;
}
}
}
Body에 실제 정보를 기입하기 위해 Body에 있는 정보를 추출하기 위해 인자값을 받아준다. 또한 해당 값이 Body에서 긁어왔다라는 것을 알려주기 위해 인자값에 [FromBody]의 값을 적어준다. 이 후 새롭게 생성하는 것이므로 GameResults에 Add를 통해 데이터를 넣어주고, DB 연동을 위해 저장후 gameResult를 반환한다.
다음은 업데이트이다. Update의 경우 PUT 메서드와 Body에 데이터를 넣어준다고 하였으므로 Create와 비슷하게 아래와 같이 코드를 작성해준다.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SharedData.Models;
using WebApi.Data;
namespace WebApi.Controllers
{
// Update
// PUT
// /api/ranking (보안 문제로 웹에서는 사용하지 않음)
// 아이템 갱신 요청 (Body에 실제 정보 담아서 보냄)
[Route("api/[controller]")]
[ApiController]
public class RankingController : ControllerBase
{
ApplicationDbContext _context;
public RankingController(ApplicationDbContext context)
{
_context = context;
}
// Create
[HttpPost]
public GameResult AddGameResult([FromBody]GameResult gameResult)
{
_context.GameResults.Add(gameResult);
_context.SaveChanges();
return gameResult;
}
// Read
...
// Update
[HttpPut]
public bool UpdateGameResult([FromBody] GameResult gameResult)
{
GameResult findResult = _context.GameResults
.Where(x => x.Id == gameResult.Id)
.FirstOrDefault();
if (findResult == null)
{
return false;
}
findResult.UserName = gameResult.UserName;
findResult.Score = gameResult.Score;
_context.SaveChanges();
return true;
}
}
}
마찬가지로 Body에 실제 정보를 기입하기 위해 Body에 있는 정보를 추출하기 위해 인자 값을 받고, [FromBody]를 사용한다. 인자 값으로 받은 데이터를 링큐의 Where을 통해 ID를 검사한다. 만약 해당 ID를 가진 데이터가 없을 경우 false를 반환하고, 그렇지 않을 경우 UserName, Score를 수정한 후 DB에 저장하여 동기화 처리를 한 후, true를 반환하여 처리한다.
마지막으로 Delete를 만들어주도록 하자. Delete의 경우 DELETE 메서드를 사용하므로 아래와 같이 코드를 작성해준다.
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SharedData.Models;
using WebApi.Data;
namespace WebApi.Controllers
{
// Delete
// DELETE
// /api/ranking/1 (보안 문제로 웹에서는 사용하지 않음)
// → id 1번 아이템 삭제 요청
[Route("api/[controller]")]
[ApiController]
public class RankingController : ControllerBase
{
ApplicationDbContext _context;
public RankingController(ApplicationDbContext context)
{
_context = context;
}
// Create
...
// Update
...
// Delete
[HttpDelete("{id}")]
public bool DeleteGameResult(int id)
{
GameResult findResult = _context.GameResults
.Where(x => x.Id == id)
.FirstOrDefault();
if (findResult == null)
{
return false;
}
_context.GameResults.Remove(findResult);
_context.SaveChanges();
return true;
}
}
}
Delete의 경우 삭제할 데이터의 id를 받아오기 위해 인자 값으로 id를 받는다. 이 후 Update와 마찬가지로 인자 값으로 받은 id를 통해 링큐의 Where을 통해 데이터를 확인한다. 이 후 데이터가 없을 경우 false를 반환하고, 그렇지 않을 경우 GameResults에서 Remove를 통해 데이터를 삭제한다. 그리고 DB에 저장하여 동기화 처리를 한 후, true를 반환하여 처리한다.
여기까지 각각의 기능들을 모두 함수로 구현하였으면 Postman을 통해 해당 기능들이 잘 작동하는지 테스트 해보도록 하자.
Postman을 통해 새 창을 열고 메서드를 'POST'로 선택한다. 이 후 개개인의 localhost의 주소와 포트를 입력하고 /api/raning을 입력한다. 이 후 Body 탭을 활성화 시켜주고. raw를 클릭 한 후 보내는 방법으로 JSON을 선택한다. 현재는 POST 즉 Create를 테스트 할 것이므로 Username을 Test, Socre를 666으로 설정한다. 이 후 Send를 누르면 데이터가 전송이 되고, 이에 대한 리턴값으로 id가 4인 GameResult가 생성된 것을 볼 수 있다.
다음으로는 Update를 테스트 해보자. 먼저 새 창을 열고 메서드를 'PUT'으로 선택한다. 이 후 일전과 마찬가지로 주소, 포트, url을 입력 후 Body 탭을 선택하여 raw, josn을 선택한다. 기존의 Test 유저의 점수 666을 555로 바꾸어 Send를 클릭하면 브레이크 포인트에 의해 UpdateGameResult가 걸리는 것을 볼 수 있으며, 정상 처리가 되어 true의 값이 반환되어 전달 받은 것을 볼 수 있다.
마지막으로 Delete를 테스트 해보자. 먼저 새 창을 열고 메서드를 'DELETE'으로 선택한다. 이 후 일전과 마찬가지로 주소, 포트, url을 입력한다. 이 후 삭제할 UserID를 입력하는데, 우리는 새롭게 생성된 Test 유저의 데이터인 '5'를 선택하여 지워보도록하자. Send를 누르면 데이터가 정상적으로 지워지고, 마찬가지로 true 값이 반환되는 것을 볼 수 있다. 이 후 웹 페이지에서 /api/ranking으로 이동하면 새롭게 생성했던 'Test' 유저가 사라진 것을 볼 수 있다.
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 6-7-5. WebAPI와 REST 서비스 : Unity와 WebApi 연동 (6) | 2024.10.17 |
---|---|
Part 6-7-4. WebAPI와 REST 서비스 : Blazor와 WebApi 연동 (2) | 2024.10.16 |
Part 6-7-2. WebAPI와 REST 서비스 : WebApi #2 (0) | 2024.10.13 |
Part 6-7-1. WebAPI와 REST 서비스 : WebApi #1 (2) | 2024.10.11 |
Part 6-6-4. Blazor 미니 프로젝트 : Blazor RankingApp #4 (5) | 2024.10.08 |