✅ 1. WebAPI 개요 및 REST 개념
🔹 Blazor vs WebAPI
| 구분 | 설명 |
|---|
| Blazor | HTML을 함께 렌더링하는 SPA 방식의 웹 UI |
| WebAPI | HTML이 필요 없고 데이터만 전달 |
| Unity 연동 | WebAPI 방식 사용 (데이터만 주고받음) |
Unity와 연동할 땐 HTML UI는 필요 없으며, WebAPI를 통해 JSON 형태로 데이터만 주고받으면 된다.
🔹 REST란?
- REST (Representational State Transfer)
HTTP 통신 기능을 재사용하여 데이터 송수신 방식에 규칙을 부여한 것
(공식 스펙은 아님, 사실상 표준처럼 사용됨)
✅ REST의 CRUD 매핑
| 동작 | HTTP Method | URL 예시 | 설명 |
|---|
| Create | POST | /api/ranking | Body에 데이터 담아 전송 |
| Read | GET | /api/ranking, /api/ranking/1 | 전체 조회, ID로 조회 |
| Update | PUT | /api/ranking | Body에 수정된 데이터 전송 |
| Delete | DELETE | /api/ranking/1 | 특정 ID 데이터 삭제 |
✅ 2. 프로젝트 구성 및 DB 연동
🔹 WebAPI 프로젝트 생성
- ASP.NET Core Web App (비-블레이저) 선택
- 인증 설정 ❌ (사용 안 함)
🔹 공용 모델 공유용 프로젝트 만들기
SharedData 프로젝트 생성
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