Apex REST API Callouts Util作成

#1.目的
Apex REST Callouts Utilを作成します。

#2.ソース
```CalloutUtil.cls
public class CalloutUtil{
    /**リクエストメソッド */
    private enum RequestMethod {
        GET, POST, PUT
    }
    /**
     * GET請求を出す
     * @param {String} url URL
     * @param {Map} mapHeader ヘッダー
     * @param {Map} mapParam パラメータ
     * @return {HttpResponse} 請求レスポンス
     */
    public static HttpResponse sendGetReqeust(String url,
                                              Map<String, Object> mapHeader,
                                              Map<String, Object> mapParam) {
        return sendRequest(url, RequestMethod.GET, mapHeader, mapParam);
    }

    /**
     * POST請求を出す
     * @param {String} url URL
     * @param {Map} mapHeader ヘッダー
     * @param {Map} mapParam パラメーラ
     * @return {HttpResponse} 請求レスポンス
     */
    public static HttpResponse sendPostReqeust(String url,
                                               Map<String, Object> mapHeader,
                                               Map<String, Object> mapParam) {
        return sendRequest(url, RequestMethod.POST, mapHeader, mapParam);
    }

    /**
     * PUT請求を出す
     * @param {String} url URL
     * @param {Map} mapHeader ヘッダー
     * @param {Map} mapParam パラメータ
     * @return {HttpResponse} 請求レスポンス
     */
    public static HttpResponse sendPutReqeust(String url,
                                              Map<String, Object> mapHeader,
                                              Map<String, Object> mapParam) {
        return sendRequest(url, RequestMethod.PUT, mapHeader, mapParam);
    }

    /**
     * 請求を出す
     * @param url URL 請求URL
     * @param {RequestMethod} method 請求メソッド
     * @param {Map} mapHeader ヘッダー
     * @param {Map} mapParam パラメータ
     * @return {HttpResponse} 請求レスポンス
     */
    private static HttpResponse sendRequest(String url, RequestMethod method,
                                            Map<String, Object> mapHeader,
                                            Map<String, Object> mapParam) {
        //リクエスト作成
        HttpRequest request = new HttpRequest();
        if (method.equals(RequestMethod.GET)) {
            // パラメータ設定
            List <String> paramList = new List <String>();
            for (String key : mapParam.keySet()) {
                paramList.add(key + '=' + EncodingUtil.urlEncode(String.valueOf(mapParam.get(key)), 'UTF-8'));
            }
            if (paramList.size() > 0) {
                String param = '?' + String.join(paramList, '&');
                url += param;
            }
        } else {
            String param = JSON.serialize(mapParam);
            request.setBody(param);
        }
        //ヘッダー設定
        for (String key : mapHeader.keySet()) {
            request.setHeader(key, (String)mapHeader.get(key));
        }
        //請求メソッドを設定
        request.setMethod(method.name());
        //URL設定
        request.setEndpoint(url);
        System.debug('url:' + url);
        Http http = new Http();
        HttpResponse response = http.send(request);
        // エラー無しの場合レスポンスを返却
        return response;
    }
}
```

```CalloutUtil.cls-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>52.0</apiVersion>
    <status>Active</status>
</ApexClass>
```

#3.参考
https://trailhead.salesforce.com/zh-CN/content/learn/modules/apex_integration_services/apex_integration_rest_callouts

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_restful_http_httprequest.htm

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_restful_http_httpresponse.htm