2017-02-06 6 views
0

처음부터 작성했거나 API 엔트리 포인트에 대한 HTTP 요청 생성과 동일한 형식을 사용하는 오픈 소스 라이브러리가 여러 개 있습니다. 현재 다음과 같이 쓰여 있습니다 :HTTP 요청 리팩토링

private string _apiExtension = $"&appid={_apiKey}"; 
    private string _apiEntryPoint = "http://api.openweathermap.org/data/2.5/"; 

    public static string GenerateWebRequest(string conn) 
    { 
     try 
     { 
      if (!string.IsNullOrEmpty(conn)) 
      { 
       using (var webClient = new WebClient()) 
       { 
        return webClient.DownloadString(conn); 

       } 
      } 

     } 
     catch (WebException e) 
     { 
      Console.WriteLine(e.StackTrace); 
     } 
     return string.Empty; 
    } 

HTTP 요청을 생성하고 JSON 응답을 반환하는 데 사용됩니다.

그때 그렇게 같은 conn을 짓고 있어요 : 라이브러리의 생성자에서 초기화된다 _apiKey

http://api.openweathermap.org/data/2.5/weather?lat={latitude}&lon={longitude}&appid={_apiKey} 

_apiEntryPoint되는 문자열 : 같이 보일 것이다

string queryByPoint = _apiEntryPoint + $"weather?lat={latitude}&lon={longitude}" + _apiExtension; 

.

더 좋은 방법이 있나요? 소규모에서는 연결 문자열을 작성하는 것이 정확히 과세되지는 않지만 코드 반복과 같은 느낌이 들며 단일 URL을 작성하는 데 4 줄의 코드를 사용하는 것이 아마도 과도 할 것입니다. 여기

+0

중복되는 4 줄의 코드는 무엇입니까? – Aaron

답변

1

Flurl 여기 도울 수있는 방법입니다 (면책 조항 : 나는 저자 해요) : (즉, 당신이 필요로하는 모든 만약 잡아 바로 core package), 그리고 유창하게 사람들을 호출

var queryByPoint = _apiEntryPoint 
    .AppendPathSegment("weather") 
    .SetQueryParams(new { lat = latitude, lon = longitude, appid = _apiKey }); 

Flurl의 주요 목표는 building URLs in fluent, structured way을 가능하게하다 URL을 입력하고 인위적으로 가능한 적은 키 누르기로 응답을 비 직렬화합니다 (모든 비트에 대해 Flurl.Http 잡기). testability, extensibilitycross-platform support을 활성화하는 데 많은 노력을 기울였습니다.이 모든 것이 API 래퍼 라이브러리에 이상적이라고 생각합니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 내가 뭘 찾고 있었는지 정확하게 보입니다. 고마워요! –