본문 바로가기
프로그래밍/C#

C#으로 RESTful API 개발하기 🌐🌍

by 다다면체 2024. 12. 18.
728x90
반응형
반응형

안녕하세요! 오늘은 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 서버를 구축할 준비가 되었어요! 이 내용을 바탕으로 더 나은 시스템을 만들 수 있도록 연습을 많이 해보세요. 🚀

궁금한 점이나 추가로 알고 싶은 내용이 있으면 언제든지 질문해주세요! 😊

728x90
반응형