안녕하세요! 오늘은 C#과 ASP.NET Core를 사용해서 RESTful API를 어떻게 개발할 수 있는지, 그리고 이 API를 통해 데이터를 주고받고 인증을 처리하는 방법을 자세히 살펴보려고 해요. 🖥️🚀
이 포스팅을 통해 HTTP 메서드부터 JSON 데이터 처리, 그리고 API 인증까지 실제로 사용할 수 있는 내용들을 배워보세요! 😄
1. HTTP 메서드(GET, POST, PUT, DELETE) 설명 🌍
먼저 RESTful API에서 가장 중요한 HTTP 메서드들에 대해 간단히 설명해드릴게요! 각 메서드는 서버와 클라이언트 간에 데이터를 어떻게 주고받을지 결정하는 역할을 합니다. 여러분이 RESTful API를 만들 때, 이 메서드들을 잘 이해하고 활용하는 게 중요해요!
- GET: 데이터를 조회할 때 사용해요. 예를 들어, 사용자 정보를 가져오거나, 게시글 목록을 불러오는 요청을 보낼 때 사용하죠.
- POST: 새로운 데이터를 서버에 제출할 때 사용해요. 예를 들어, 회원가입 시 사용자 정보를 서버에 보낼 때 사용하죠.
- PUT: 기존 데이터를 수정할 때 사용해요. 예를 들어, 사용자 프로필을 업데이트할 때 사용해요.
- DELETE: 데이터를 삭제할 때 사용해요. 예를 들어, 게시글을 삭제할 때 사용하죠.
2. ASP.NET Core로 API 서버 만들기 🖥️
이제 ASP.NET Core를 사용해 실제 API 서버를 만들어보는 시간을 가질 거예요! 😆
프로젝트 생성
Visual Studio 또는 명령어를 통해 간단히 API 프로젝트를 생성할 수 있어요. 아래 명령어를 터미널에 입력해서 시작해봅시다!
dotnet new webapi -n MyApi
cd MyApi
컨트롤러 만들기
API 서버는 컨트롤러를 통해 요청을 받아들이고, 응답을 반환합니다. 간단한 WeatherForecastController.cs 파일을 만들어보죠.위 코드는 /api/weatherforecast 경로로 GET 요청을 보내면, 날씨 정보를 반환하는 간단한 API 서버예요. 😄
using Microsoft.AspNetCore.Mvc;
namespace MyApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Hot", "Sweltering", "Scorching"
};
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string Summary { get; set; }
}
}
3. JSON 데이터 주고받기 📡
이제 클라이언트와 서버가 데이터를 어떻게 주고받을지 알아볼 거예요. RESTful API에서 주고받는 데이터는 주로 JSON 형식이에요. 서버는 클라이언트의 요청을 처리하고, 그에 맞는 JSON 데이터를 응답으로 보내요. 클라이언트는 이 데이터를 받아서 화면에 보여주거나, 다른 로직을 처리하죠.
- POST 요청으로 JSON 데이터 전송하기
클라이언트가 서버로 데이터를 전송할 때, POST 메서드를 사용해서 JSON 데이터를 보낼 수 있어요. 아래는 C#에서 JSON 데이터를 보내는 예시예요!
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
public class ApiClient
{
private readonly HttpClient _client;
public ApiClient(HttpClient client)
{
_client = client;
}
public async Task PostDataAsync()
{
var data = new { Name = "John", Age = 30 };
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _client.PostAsync("https://localhost:5001/api/people", content);
var responseData = await response.Content.ReadAsStringAsync();
}
}
- 서버에서 JSON 처리하기서버 측에서는 클라이언트가 보낸 JSON 데이터를 받아서 처리할 수 있어요. 예를 들어, 사용자가 입력한 정보를 데이터베이스에 저장하는 경우입니다.
[HttpPost]
public IActionResult CreatePerson([FromBody] Person person)
{
if (person == null)
{
return BadRequest();
}
// 데이터 처리 로직
return CreatedAtAction(nameof(GetPerson), new { id = person.Id }, person);
}
FromBody 속성은 클라이언트에서 보내는 JSON 데이터를 자동으로 Person 객체로 변환해줘요! 😎
4. API 인증 및 권한 처리 (JWT 토큰) 🔑
API를 개발하면서 중요한 점은 바로 인증과 권한 관리입니다. JWT(Json Web Token)는 이러한 인증을 처리하는 데 유용한 방법이에요. JWT는 서버가 사용자 인증을 처리한 후, 유효한 사용자만 API에 접근할 수 있도록 돕습니다.
- JWT 발급하기
사용자가 로그인하면 서버에서 JWT를 발급해줘요. 이 토큰은 클라이언트가 API 서버에 요청을 보낼 때, 인증된 사용자만 접근할 수 있게 해줍니다.
public class JwtService
{
public string GenerateJwtToken(string username)
{
var claims = new[]
{
new Claim(ClaimTypes.Name, username)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretKey"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "yourApp",
audience: "yourApp",
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
- JWT 검증하기
클라이언트가 요청을 보낼 때 JWT를 헤더에 담아서 보내면, 서버는 이를 검증하여 유효한 사용자만 요청을 처리할 수 있도록 합니다.
public class JwtMiddleware
{
private readonly RequestDelegate _next;
public JwtMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context, ITokenService tokenService)
{
var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
if (token != null)
{
var user = tokenService.ValidateToken(token);
if (user != null)
{
context.Items["User"] = user;
}
}
await _next(context);
}
}
마무리 🎉
여러분, C#과 ASP.NET Core를 이용한 RESTful API 개발이 얼마나 간단하고 강력한지 이해되셨나요? 이 포스팅에서는 HTTP 메서드부터 시작해서, JSON 데이터 처리와 JWT 인증까지 중요한 내용을 살펴보았습니다. 💡
이제 여러분도 강력한 API 서버를 구축할 준비가 되었어요! 이 내용을 바탕으로 더 나은 시스템을 만들 수 있도록 연습을 많이 해보세요. 🚀
궁금한 점이나 추가로 알고 싶은 내용이 있으면 언제든지 질문해주세요! 😊
'프로그래밍 > C#' 카테고리의 다른 글
C# 멀티스레딩과 동시성 제어 🧵🚀 (0) | 2024.12.18 |
---|---|
C#과 SQL Server를 연동하여 데이터 관리하기 🗄️💡 (0) | 2024.12.18 |
C#을 활용한 Windows Forms와 WPF 애플리케이션 만들기 🖥️✨ (1) | 2024.12.18 |
C#에서 파일과 스트림 처리하기 📁✨ (0) | 2024.12.18 |
C#에서 디자인 패턴 활용하기 🧩💡 (0) | 2024.12.17 |