✅ 1. WebAPI 개요 및 REST 개념

🔹 Blazor vs WebAPI

구분설명
BlazorHTML을 함께 렌더링하는 SPA 방식의 웹 UI
WebAPIHTML이 필요 없고 데이터만 전달
Unity 연동WebAPI 방식 사용 (데이터만 주고받음)

Unity와 연동할 땐 HTML UI는 필요 없으며, WebAPI를 통해 JSON 형태로 데이터만 주고받으면 된다.


🔹 REST란?

  • REST (Representational State Transfer)
    HTTP 통신 기능을 재사용하여 데이터 송수신 방식에 규칙을 부여한 것
    (공식 스펙은 아님, 사실상 표준처럼 사용됨)

✅ REST의 CRUD 매핑

동작HTTP MethodURL 예시설명
CreatePOST/api/rankingBody에 데이터 담아 전송
ReadGET/api/ranking, /api/ranking/1전체 조회, ID로 조회
UpdatePUT/api/rankingBody에 수정된 데이터 전송
DeleteDELETE/api/ranking/1특정 ID 데이터 삭제

✅ 2. 프로젝트 구성 및 DB 연동

🔹 WebAPI 프로젝트 생성

  1. ASP.NET Core Web App (비-블레이저) 선택
  2. 인증 설정 ❌ (사용 안 함)

🔹 공용 모델 공유용 프로젝트 만들기

  • SharedData 프로젝트 생성
    • Models/GameResult.cs 작성
  • WebApi 프로젝트에서 SharedData 참조 추가
namespace SharedData.Models
{
    public class GameResult
    {
        public int Id { get; set; }
        public int UserId { get; set; }
        public string UserName { get; set; }
        public int Score { get; set; }
        public DateTime Date { get; set; }
    }
}

🔹 WebApi 프로젝트에서 DB 연동 준비

1. ApplicationDbContext.cs 생성 (WebApi/Data 폴더)

using Microsoft.EntityFrameworkCore;
using SharedData.Models;

namespace WebApi.Data
{
    public class ApplicationDbContext : DbContext
    {
        public DbSet<GameResult> GameResults { get; set; }

        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options) { }
    }
}

2. NuGet 패키지 설치 (필수)

  • Microsoft.EntityFrameworkCore (6.0)
  • Microsoft.EntityFrameworkCore.SqlServer (6.0)
  • Microsoft.EntityFrameworkCore.Design (6.0)

3. Program.cs에 DB 설정

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

4. appsettings.json 설정

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=RankingApiDB;Trusted_Connection=True;"
  },
  ...
}

5. 마이그레이션 & DB 생성

PM> Add-Migration RankingApp
PM> Update-Database

✅ 3. CRUD 구현 - Read

🔹 RankingController 생성

[Route("api/[controller]")]
[ApiController]
public class RankingController : ControllerBase
{
    private readonly ApplicationDbContext _context;

    public RankingController(ApplicationDbContext context)
    {
        _context = context;
    }
}

🔹 Read - 전체 데이터 조회

[HttpGet]
public List<GameResult> GetGameResults()
{
    return _context.GameResults
        .OrderByDescending(r => r.Score)
        .ToList();
}

🔹 Read - 특정 ID 데이터 조회

[HttpGet("{id}")]
public GameResult GetGameResult(int id)
{
    return _context.GameResults
        .FirstOrDefault(r => r.Id == id);
}

✅ 4. CRUD 구현 - Create / Update / Delete

🔹 Create (POST)

[HttpPost]
public GameResult AddGameResult([FromBody] GameResult gameResult)
{
    _context.GameResults.Add(gameResult);
    _context.SaveChanges();
    return gameResult;
}

🔹 Update (PUT)

[HttpPut]
public bool UpdateGameResult([FromBody] GameResult gameResult)
{
    var target = _context.GameResults.FirstOrDefault(r => r.Id == gameResult.Id);
    if (target == null) return false;

    target.UserName = gameResult.UserName;
    target.Score = gameResult.Score;
    _context.SaveChanges();
    return true;
}

🔹 Delete (DELETE)

[HttpDelete("{id}")]
public bool DeleteGameResult(int id)
{
    var target = _context.GameResults.FirstOrDefault(r => r.Id == id);
    if (target == null) return false;

    _context.GameResults.Remove(target);
    _context.SaveChanges();
    return true;
}

✅ 5. Postman으로 API 테스트

🔹 1. Read 테스트

  • 메서드: GET
  • 주소: http://localhost:xxxx/api/ranking
  • 결과: 전체 GameResult 목록이 JSON 형태로 출력

🔹 2. Create 테스트

  • 메서드: POST
  • Body → raw → JSON (application/json)
{
  "UserName": "Test",
  "Score": 777,
  "Date": "2025-03-22T12:00:00"
}

🔹 3. Update 테스트

  • 메서드: PUT
  • Body → raw → JSON
{
  "Id": 4,
  "UserName": "TestUserUpdated",
  "Score": 888,
  "Date": "2025-03-22T12:00:00"
}

🔹 4. Delete 테스트

  • 메서드: DELETE
  • 주소: http://localhost:xxxx/api/ranking/4

profile
李家네_공부방

0개의 댓글