본문 바로가기
C#

27# C# RestSharp 사용해서 restapi 샘플데이터 만들기

by NaHyungMin 2020. 8. 6.

자바로 rest api 만들면서 C#으로 테스트하던 도중 포스팅을 하려 한다.

 

간단한 자바 rest api 이메일 중복 검사 코드

@PostMapping(value = "/duplicate_email")
@ApiOperation(value="이메일 중복검사", notes="회원 가입 시 이메일 중복 확인용.")
public String emailDuplicate(@RequestParam(value = "email", required = true) String email) throws Exception {
    if(StringUtils.isEmpty(email) == true)
    	throw new RestapiInvalidRequestException(CustomErrorCode.Email_Blank, CustomErrorMessgae.emailBlank);

    if(email.matches(Constants.emailRegExp) == false)
    	throw new RestapiInvalidRequestException(CustomErrorCode.Email_Invalid, CustomErrorMessgae.emailInvalid);

    Boolean isEmailDuplicate = createService.isEmailDuplicate(email);

    ResponseMessage message = new ResponseMessage();
    Map<String, Boolean> result =  new HashMap<>();
    result.put("result", isEmailDuplicate);
    message.add(result);

    return Singleton.Instance(JsonConvert.class).convert(message);
}

 

테스트에 사용한 C# 코드 구조

 

 

nuget에서 RestSharp을 받았다.

 

 

C# 메인

using restapi_client.JsonRequester;
using restapi_client.JsonRequester.Store;
using System;

namespace restapi_client
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            //_ = new CreateUser();
            //_ = new Pingpong();
            //_ = new UserLogin();
            //_ = new EmailDuplicate();
            //_ = new Pingpong2();
            _ = new Information();

            //Sample
            //IRequest request = new Information();
            //request.RequestJson("", "");

            Console.ReadLine();
        }
    }
}

 

처음에는 인터페이스 구조를 사용하여 Sample처럼 할까 하다가 그냥 안에다가 구현해서 바로 테스트하기로 함.

using System;
using System.Collections.Generic;
using System.Text;

namespace restapi_client
{
    interface IRequest
    {
        string RequestJson(string url, string json);
    }
}

 

매개 변수 하나를 post로 보내는 클래스

using RestSharp;
using System;
using System.Collections.Generic;
using System.Text;

namespace restapi_client.JsonRequester
{

    public class EmailDuplicate : RequestBase, IRequest
    {
        public EmailDuplicate()
        {
            string url = "create/duplicate_email";

            Parameter p = new Parameter("email", "hi@gmail.com", ParameterType.GetOrPost);
            
            base.RequestString(url, p);
        }
    }
}

 

매개변수를 보내지 않는 클래스

using RestSharp;
using System;
using System.Collections.Generic;
using System.Text;

namespace restapi_client.JsonRequester.Store
{
    public class Information : RequestBase, IRequest
    {
        public Information()
        {
            string url = "store/information";

            base.Request(url); 
        }
    }
}

 

json으로 보내는 클래스

using RestSharp;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace restapi_client.JsonRequester.Store
{
    public class Join : RequestBase, IRequest
    {
        public Join()
        {
            string url = "store/join";

            JsonClass.StoreJoin user = new JsonClass.StoreJoin()
            {
               
            };

            string jsonString = JsonSerializer.Serialize(user);

            base.RequestJson(url, jsonString);
        }
    }
}

 

상속받는 base 클래스

using RestSharp;
using System;
using System.Collections.Generic;
using System.Text;

namespace restapi_client
{
    public class RequestBase : IRequest
    {
        private readonly string baseUrl = "로컬주소";
        //private readonly string baseUrl = "테스트서버주소";
        private RestClient client;
        private RestRequest request;

        public RequestBase()
        {
            request = new RestRequest
            {
                Method = Method.POST
            };

            request.AddHeader("Accept", "application/json");
            request.AddHeader("유저키", "Xe1M0Pi0XL9Uwei8NyhznA==");
            request.AddHeader("유저정보", "248");
        }

        public string RequestJson(string url, string json)
        {
            client = new RestClient(string.Format("{0}/{1}", baseUrl, url));

            request.Parameters.Clear();
            request.AddParameter("application/json", json, ParameterType.RequestBody);

            IRestResponse response = client.Execute(request);

            Console.WriteLine(response.Content);

            return response.Content; // raw content as string  
        }


        public string Request(string url)
        {
            client = new RestClient(string.Format("{0}/{1}", baseUrl, url));

            IRestResponse response = client.Execute(request);

            Console.WriteLine(response.Content);

            return response.Content; // raw content as string  
        }


        public string RequestString(string url, Parameter parameter)
        {
            client = new RestClient(string.Format("{0}/{1}", baseUrl, url));

            request.Parameters.Clear();
            request.AddParameter(parameter);

            client.Head(request);
            IRestResponse response = client.Execute(request);
          

            Console.WriteLine(response.Content);

            return response.Content; // raw content as string  
        }

        public string RequestString(string url, List<Parameter> parameters)
        {
            client = new RestClient(string.Format("{0}/{1}", baseUrl, url));

            request.Parameters.Clear();

            foreach (Parameter p in parameters)
            {
                request.AddParameter(p);
            }

            IRestResponse response = client.Execute(request);

            Console.WriteLine(response.Content);

            return response.Content; // raw content as string  
        }
    }
}

 

자바 rest api를 만들면서 postman을 사용하지 않고 원하는 패킷을 바로 테스트할 수 있어 좋다.

 

'C#' 카테고리의 다른 글

26# Winform ListView Focus 잃었을 때도 선택 고정  (0) 2019.10.25
25# 비트 연산  (0) 2019.10.11
24# 서버와 접속 중일 때 자신 포트 찾기  (0) 2019.10.03
23# RSACryptoServiceProvider  (0) 2019.10.01
22# CQRS  (0) 2019.08.09