Last active
July 30, 2020 01:19
-
-
Save moaible/e84cf0244652f9350e94e3a9a0be4555 to your computer and use it in GitHub Desktop.
Amplify API Wrapper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { API, Logger } from 'aws-amplify'; | |
// NOTE: もしAmplify関連で問題を調査したい場合 'DEBUG' にすると細かい挙動が確認できます | |
Logger.LOG_LEVEL = 'WARN'; | |
export type Headers = object | undefined; // TODO: 適切な型にする | |
export type QueryParams = object | undefined; // TODO: 適切な型にする | |
export type Body = object | undefined; // TODO: 適切な型にする | |
export interface ApiRequest { | |
base?: string; | |
method: ApiMethod; | |
pathResource: string; | |
headers?: Headers; | |
body?: Body; | |
queryStringParameters?: QueryParams; | |
} | |
async function mapToApiMethodFunction<T>( | |
amplifyAPI: AmplifyAPIClient<T>, | |
request: ApiRequest, | |
): Promise<ApiResponse<T>> { | |
switch (request.method) { | |
case 'GET': { | |
return amplifyAPI.get(request.base, request.pathResource, { | |
headers: request.headers, | |
body: request.body, | |
queryStringParameters: request.queryStringParameters, | |
}); | |
} | |
case 'POST': { | |
return amplifyAPI.post(request.base, request.pathResource, { | |
headers: request.headers, | |
body: request.body, | |
queryStringParameters: request.queryStringParameters, | |
}); | |
} | |
case 'DELETE': { | |
return amplifyAPI.del(request.base, request.pathResource, { | |
headers: request.headers, | |
body: request.body, | |
queryStringParameters: request.queryStringParameters, | |
}); | |
} | |
case 'PUT': { | |
return amplifyAPI.put(request.base, request.pathResource, { | |
headers: request.headers, | |
body: request.body, | |
queryStringParameters: request.queryStringParameters, | |
}); | |
} | |
case 'PATCH': { | |
return amplifyAPI.patch(request.base, request.pathResource, { | |
headers: request.headers, | |
body: request.body, | |
queryStringParameters: request.queryStringParameters, | |
}); | |
} | |
default: { | |
return Promise.reject(new Error('never call case')); | |
} | |
} | |
} | |
export async function send<T>(request: ApiRequest): Promise<T> { | |
return mapToApiMethodFunction<T>(API, request).then((response) => { | |
return response; | |
}); | |
} | |
export type ApiMethod = 'GET' | 'POST' | 'DELETE' | 'PATCH' | 'PUT'; | |
type ApiMethodFunctionParameters = undefined | { | |
headers: undefined | object; | |
body: undefined | object; | |
queryStringParameters: undefined | object; | |
withCredentials?: boolean; | |
}; | |
type ApiResponse<T> = T; | |
interface AmplifyAPIClient<T> { | |
get(apiName: string, | |
path: string, | |
parameters: ApiMethodFunctionParameters): Promise<ApiResponse<T>>; | |
post(apiName: string, | |
path: string, | |
parameters: ApiMethodFunctionParameters): Promise<ApiResponse<T>>; | |
del(apiName: string, | |
path: string, | |
parameters: ApiMethodFunctionParameters): Promise<ApiResponse<T>>; | |
patch(apiName: string, | |
path: string, | |
parameters: ApiMethodFunctionParameters): Promise<ApiResponse<T>>; | |
put(apiName: string, | |
path: string, | |
parameters: ApiMethodFunctionParameters): Promise<ApiResponse<T>>; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as api from '../api/AmplifyApiClient'; | |
export type ExampleResponse = { | |
name: string | |
} | |
export async function getExample(id: number): Promise<ExampleResponse> { | |
return api.send({ | |
method: 'GET', | |
pathResource: `/example/${id}`, | |
headers: {}, | |
// NOTE: GETでbodyに空オブジェクトを入れるとSigned Requestで必ず失敗する | |
// @see https://github.com/aws-amplify/amplify-js/issues/3534 | |
body: null, | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment