I have a class that makes calls to a Web API (Using RestSharp), which works fine but the code is super ugly. What would be the best way to refactor it? I thought of just doing a Facade pattern so all the calls that goes to cart will be in a separate class and order will be in an order
class and so on.
All the methods looks very similar maybe I can extract something.
public class ApiRestClient : IApiRestClient
{
private readonly RestClient _client;
private readonly string _url = ConfigurationManager.AppSettings["webapibaseurl"];
public ApiRestClient()
{
_client = new RestClient(_url);
}
public TokenDto Get(Guid id)
{
var request = new RestRequest("/cart/{id}", Method.GET) {RequestFormat = DataFormat.Json};
request.AddParameter("id", id, ParameterType.UrlSegment);
var response = _client.Execute(request);
return JsonConvert.DeserializeObject<TokenDto>(response.Content);
}
public void SaveOrder(OrderDto order)
{
var request = new RestRequest("/order/", Method.POST) {RequestFormat = DataFormat.Json};
request.AddObject(order);
_client.Execute<TokenDto>(request);
}
public string GetLayout(int? id)
{
var request = new RestRequest("/customer/{id}", Method.GET) {RequestFormat = DataFormat.Json};
request.AddParameter("id", id, ParameterType.UrlSegment);
var response = _client.Execute(request);
return JsonConvert.DeserializeObject<CustomerDto>(response.Content).Layout;
}
public void UpdateUser(UserDto userMap)
{
var request = new RestRequest("/user/", Method.POST) {RequestFormat = DataFormat.Json};
request.AddObject(userMap);
_client.Execute<UserDto>(request);
}
public IEnumerable<TokenDto> GetInvoices(Guid id)
{
var request = new RestRequest("/receipt/{id}", Method.GET) {RequestFormat = DataFormat.Json};
request.AddParameter("id", id, ParameterType.UrlSegment);
var response = _client.Execute(request);
return JsonConvert.DeserializeObject<IEnumerable<TokenDto>>(response.Content);
}
public TokenDto GetInvoice(Guid id)
{
var request = new RestRequest("/receipt/invoice/{id}", Method.GET) {RequestFormat = DataFormat.Json};
request.AddParameter("id", id, ParameterType.UrlSegment);
var response = _client.Execute(request);
return JsonConvert.DeserializeObject<TokenDto>(response.Content);
}
}