-
Notifications
You must be signed in to change notification settings - Fork 19
SMS용 BFF 만들기 #59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
이 문서 한 번 보실래요? 특히 https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies |
일단 제가 아는 선에서는 APIM 테스트 도구는 별도로 있지 않구요, 포탈에서 확인할 수 있습니다. 아니 할 수 있긴 한데 APIM 티어를 개발자 티어로 올려야 해서 (200불) 추천하지 않아요. 따라서, 폴리시를 셋업하고, 그 안에 보면 엔드포인트 테스트 탭이 있으니 거길 통해서 하시면 됩니다. 지금 폴리시 셋업하신 것도 괜찮긴 한데, 우리 BFF가 최종적으로 OpenAPI 문서를 내뱉어야 합니다. 그러기 위해서는 엔드포인트별로 셋업하는 게 어떨까요? 지금 상태로 해 놓으면 확인을 해 봐야 하겠지만 Swagger UI에서는 엔드포인트는 하나만 나올 것 같은데요...? |
@justinyoo 멘토님 질문이 있습니다!
|
맞습니다! |
@justinyoo 생각보다 매우 간단한 글로벌 정책 설정으로 해결했습니다. bff apim settingbff global policy setupPostman variable setupSMS 상태 확인SMS 발송발신 번호 목록 검색발송 목록 조회단문 SMS 조회이제는 이것을 bicep 파일과 policy 파일로 옮기는 작업이 필요해 보이는데요,
위의 사항들이 궁금합니다. 주말에 죄송합니다. ㅠㅠ |
지난번에도 말씀드렸던 것 같은데... BFF API에서 OpenAPI 문서 익스포트해서 그게 다섯개 엔드포인트가 잘 나오나요? 이게 제일 중요합니다. |
여기서 json 형식으로 문서를 export 하였는데요, 그 결과 다운로드 받아진 문서의 내용이 다음과 같습니다. 길어서 읽어보시기 어려우시리라 생각합니다. ㅠㅠ
{
"openapi": "3.0.1",
"info": {
"title": "BFF",
"version": "1.0"
},
"servers": [
{
"url": "https://apim-hje-dev-krc.azure-api.net/BFF"
}
],
"paths": {
"/sms/messages/{requestId}": {
"get": {
"tags": [
"messages"
],
"summary": "Messages.Get",
"operationId": "Messages-Get",
"parameters": [
{
"name": "requestId",
"in": "path",
"description": "SMS request ID",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "recipientSeq",
"in": "query",
"description": "Format - int32. SMS request sequence number",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "The OK response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/getMessageResponse"
},
"examples": {
"sample": {
"summary": "This represents the example entity for GetMessage response body.",
"value": {
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"body": {
"data": {
"requestId": "2018081000000000000000000",
"requestDate": "2018-08-10T10:06:30.0000000+00:00",
"resultDate": "2018-08-10T10:06:42.0000000+00:00",
"templateId": "TemplateId",
"templateName": "TemplateName",
"categoryId": "0",
"categoryName": "CategoryName",
"body": "Body",
"sendNo": "00000000",
"countryCode": "82",
"recipientNo": "01000000000",
"msgStatus": "3",
"msgStatusName": "success",
"resultCode": "1000",
"resultCodeName": "success",
"telecomCode": 10001,
"telecomCodeName": "SKT",
"recipientSeq": 1,
"sendType": "0",
"messageType": "SMS",
"userId": "tester",
"adYn": "N",
"resultMessage": "success",
"senderGroupingKey": "SenderGroupingKey",
"recipientGroupingKey": "RecipientGroupingKey"
}
}
}
}
}
}
}
},
"400": {
"description": "The input was invalid"
},
"500": {
"description": "The service has got an unexpected error"
}
}
}
},
"/sms/messages": {
"get": {
"tags": [
"messages"
],
"summary": "Messages.List",
"operationId": "Messages-List",
"parameters": [
{
"name": "requestId",
"in": "query",
"description": "RequestId to search. `requestId` or `startRequestDate` + `endRequestDate` or `startCreateDate` + `endCreateDate` must be filled",
"schema": {
"type": "string"
}
},
{
"name": "startRequestDate",
"in": "query",
"description": "Message sending request start date (`yyyy-MM-dd HH:mm:ss`)",
"schema": {
"type": "string"
}
},
{
"name": "endRequestDate",
"in": "query",
"description": "Message sending request end date (`yyyy-MM-dd HH:mm:ss`)",
"schema": {
"type": "string"
}
},
{
"name": "startCreateDate",
"in": "query",
"description": "Message sending registration start date (`yyyy-MM-dd HH:mm:ss`)",
"schema": {
"type": "string"
}
},
{
"name": "endCreateDate",
"in": "query",
"description": "Message sending registration end date (`yyyy-MM-dd HH:mm:ss`)",
"schema": {
"type": "string"
}
},
{
"name": "startResultDate",
"in": "query",
"description": "Message sending complete start date (`yyyy-MM-dd HH:mm:ss`)",
"schema": {
"type": "string"
}
},
{
"name": "endResultDate",
"in": "query",
"description": "Message sending complete end date (`yyyy-MM-dd HH:mm:ss`)",
"schema": {
"type": "string"
}
},
{
"name": "sendNo",
"in": "query",
"description": "Sender's phone number",
"schema": {
"type": "string"
}
},
{
"name": "recipientNo",
"in": "query",
"description": "Receiver's phone number",
"schema": {
"type": "string"
}
},
{
"name": "templateId",
"in": "query",
"description": "Template number",
"schema": {
"type": "string"
}
},
{
"name": "msgStatus",
"in": "query",
"description": "Message status code (`0`: fail, `1`: request, `2`: processing, `3`: success, `4`: Reservation cancellation, `5`: Duplicate failed)",
"schema": {
"type": "string"
}
},
{
"name": "resultCode",
"in": "query",
"description": "Receive result code (`MTR1`: success, `MTR2`: fail)",
"schema": {
"type": "string"
}
},
{
"name": "subResultCode",
"in": "query",
"description": "Receive result detail code (`MTR2_1`: Validation failed, `MTR2_2`: carrier problem, `MTR2_3`: Device problem)",
"schema": {
"type": "string"
}
},
{
"name": "senderGroupingKey",
"in": "query",
"description": "Sender's group key",
"schema": {
"type": "string"
}
},
{
"name": "recipientGroupingKey",
"in": "query",
"description": "Receiver's group key",
"schema": {
"type": "string"
}
},
{
"name": "pageNum",
"in": "query",
"description": "Page number in the pagination. Default value is '1'",
"schema": {
"type": "string"
}
},
{
"name": "pageSize",
"in": "query",
"description": "Page size in the pagination. Default value is '15'",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The OK response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/listMessagesResponse"
},
"examples": {
"sample": {
"summary": "This represents the example entity for ListMessages response body.",
"value": {
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"body": {
"pageNum": 1,
"pageSize": 15,
"totalCount": 1,
"data": [
{
"requestId": "2018081000000000000000000",
"requestDate": "2018-08-10T10:06:30.0000000+00:00",
"resultDate": "2018-08-10T10:06:42.0000000+00:00",
"templateId": "TemplateId",
"templateName": "템플릿명",
"categoryId": "0",
"categoryName": "카테고리명",
"body": "단문 테스트",
"sendNo": "00000000",
"countryCode": "82",
"recipientNo": "01000000000",
"msgStatus": "3",
"msgStatusName": "성공",
"resultCode": "1000",
"resultCodeName": "성공",
"telecomCode": 10001,
"telecomCodeName": "통신사",
"recipientSeq": 1,
"sendType": "0",
"messageType": "SMS",
"userId": "tester",
"adYn": "N",
"resultMessage": "",
"senderGroupingKey": "SenderGroupingKey",
"recipientGroupingKey": "RecipientGroupingKey"
}
]
}
}
}
}
}
}
},
"400": {
"description": "The input was invalid"
},
"500": {
"description": "The service has got an unexpected error"
}
}
},
"post": {
"tags": [
"messages"
],
"summary": "Messages.Send",
"operationId": "Messages-Send",
"requestBody": {
"description": "Message payload to send",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/sendMessagesRequestBody"
},
"examples": {
"sample": {
"summary": "This represents the example entity for SendMessages request body.",
"value": {
"templateId": "TemplateId",
"body": "body",
"sendNo": "00000000",
"requestDate": "2018-08-10T10:00:00.0000000+00:00",
"senderGroupingKey": "SenderGroupingKey",
"recipientList": [
{
"recipientNo": "01000000000",
"countryCode": "82",
"internationalRecipientNo": "821000000000",
"templateParameter": {
"key": "value"
},
"recipientGroupingKey": "recipientGroupingKey"
}
],
"userId": "UserId",
"statsId": "statsId"
}
}
}
}
}
},
"responses": {
"200": {
"description": "The OK response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/sendMessagesResponse"
},
"examples": {
"sample": {
"summary": "This represents the example entity for SendMessages response body.",
"value": {
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"body": {
"data": {
"requestId": "201808100000000000000000",
"statusCode": "2",
"senderGroupingKey": "SenderGroupingKey",
"sendResultList": [
{
"recipientNo": "01000000000",
"resultCode": 0,
"resultMessage": "SUCCESS",
"recipientSeq": 1,
"recipientGroupingKey": "RecipientGroupingKey"
}
]
}
}
}
}
}
}
}
},
"400": {
"description": "The input was invalid"
},
"500": {
"description": "The service has got an unexpected error"
}
}
}
},
"/sms/messages/status": {
"get": {
"tags": [
"messages"
],
"summary": "Messages.Status",
"operationId": "Messages-Status",
"parameters": [
{
"name": "startUpdateDate",
"in": "query",
"description": "StartDate for message list (`yyyy-MM-dd HH:mm:ss`)",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "endUpdateDate",
"in": "query",
"description": "endDate for message list (`yyyy-MM-dd HH:mm:ss`)",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "messageType",
"in": "query",
"description": "message type (`SMS`/`LMS`/`MMS`/`AUTH`)",
"schema": {
"type": "string"
}
},
{
"name": "pageNum",
"in": "query",
"description": "Page number in the pagination. Default value is '1'",
"schema": {
"type": "string"
}
},
{
"name": "pageSize",
"in": "query",
"description": "Page size in the pagination. Default value is '15'",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The OK response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/listMessageStatusResponse"
},
"examples": {
"sample": {
"summary": "This represents the example entity for ListMessageStatus response body.",
"value": {
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"body": {
"pageNum": 1,
"pageSize": 15,
"totalCount": 1,
"data": [
{
"messageType": "SMS",
"requestId": "2018081000000000000000000",
"recipientSeq": 1,
"resultCode": "1000",
"resultCodeName": "success",
"requestDate": "2018-08-10T10:06:30.0000000+00:00",
"resultDate": "2018-08-10T10:06:42.0000000+00:00",
"updateDate": "2018-10-04T16:17:15.0000000+00:00",
"telecomCode": "10003",
"telecomCodeName": "LGU",
"senderGroupingKey": "SenderGroupingKey",
"recipientGroupingKey": "RecipientGroupingKey"
}
]
}
}
}
}
}
}
},
"400": {
"description": "The input was invalid"
},
"500": {
"description": "The service has got an unexpected error"
}
}
}
},
"/sms/verify/senders": {
"get": {
"tags": [
"senders"
],
"summary": "Senders.List",
"operationId": "Senders-List",
"parameters": [
{
"name": "sendNo",
"in": "query",
"description": "Sender's phone number",
"schema": {
"type": "string"
}
},
{
"name": "useYn",
"in": "query",
"description": "Value indicating whether the number is used or not",
"schema": {
"type": "string"
}
},
{
"name": "blockYn",
"in": "query",
"description": "Value indicating whether the number is blocked or not",
"schema": {
"type": "string"
}
},
{
"name": "pageNum",
"in": "query",
"description": "Page number in the pagination. Default value is '1'",
"schema": {
"type": "string"
}
},
{
"name": "pageSize",
"in": "query",
"description": "Page size in the pagination. Default value is '15'",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The OK response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/listSendersResponse"
},
"examples": {
"sample": {
"summary": "This represents the example entity for GetMessage response body.",
"value": {
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"body": {
"pageNum": 1,
"pageSize": 15,
"totalCount": 2,
"data": [
{
"serviceId": 1234,
"sendNo": "01012345678",
"useYn": "Y",
"blockYn": "N",
"blockReason": null,
"createDate": "2020-01-01T00:00:00.0000000+00:00",
"createUser": "18ad9058-6466-48ef-8a78-08c27519ac24",
"updateDate": "2020-01-01T00:00:00.0000000+00:00",
"updateUser": "18ad9058-6466-48ef-8a78-08c27519ac24"
},
{
"serviceId": 5678,
"sendNo": "01087654321",
"useYn": "Y",
"blockYn": "N",
"blockReason": null,
"createDate": "2020-01-01T00:00:00.0000000+00:00",
"createUser": "18ad9058-6466-48ef-8a78-08c27519ac24",
"updateDate": "2020-01-01T00:00:00.0000000+00:00",
"updateUser": "18ad9058-6466-48ef-8a78-08c27519ac24"
}
]
}
}
}
}
}
}
},
"400": {
"description": "The input was invalid"
},
"500": {
"description": "The service has got an unexpected error"
}
}
}
}
},
"components": {
"schemas": {
"getMessageResponse": {
"type": "object",
"properties": {
"header": {
"$ref": "#/components/schemas/responseHeaderModel"
},
"body": {
"$ref": "#/components/schemas/responseItemBodyModel_getMessageResponseData"
}
}
},
"getMessageResponseData": {
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"requestDate": {
"type": "string"
},
"resultDate": {
"type": "string"
},
"templateId": {
"type": "string"
},
"templateName": {
"type": "string"
},
"categoryId": {
"type": "string"
},
"categoryName": {
"type": "string"
},
"body": {
"type": "string"
},
"sendNo": {
"type": "string"
},
"countryCode": {
"type": "string"
},
"recipientNo": {
"type": "string"
},
"msgStatus": {
"type": "string"
},
"msgStatusName": {
"type": "string"
},
"resultCode": {
"type": "string"
},
"resultCodeName": {
"type": "string"
},
"telecomCode": {
"type": "integer",
"format": "int32"
},
"telecomCodeName": {
"type": "string"
},
"recipientSeq": {
"type": "integer",
"format": "int32"
},
"sendType": {
"type": "string"
},
"messageType": {
"type": "string"
},
"userId": {
"type": "string"
},
"adYn": {
"type": "string"
},
"resultMessage": {
"type": "string"
},
"senderGroupingKey": {
"type": "string"
},
"recipientGroupingKey": {
"type": "string"
}
}
},
"listMessagesResponse": {
"type": "object",
"properties": {
"header": {
"$ref": "#/components/schemas/responseHeaderModel"
},
"body": {
"$ref": "#/components/schemas/responseCollectionBodyModel_listMessagesResponseData"
}
}
},
"listMessagesResponseData": {
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"requestDate": {
"type": "string"
},
"resultDate": {
"type": "string"
},
"templateId": {
"type": "string"
},
"templateName": {
"type": "string"
},
"categoryId": {
"type": "string"
},
"categoryName": {
"type": "string"
},
"body": {
"type": "string"
},
"sendNo": {
"type": "string"
},
"countryCode": {
"type": "string"
},
"recipientNo": {
"type": "string"
},
"msgStatus": {
"type": "string"
},
"msgStatusName": {
"type": "string"
},
"resultCode": {
"type": "string"
},
"resultCodeName": {
"type": "string"
},
"telecomCode": {
"type": "integer",
"format": "int32"
},
"telecomCodeName": {
"type": "string"
},
"recipientSeq": {
"type": "integer",
"format": "int32"
},
"sendType": {
"type": "string"
},
"messageType": {
"type": "string"
},
"userId": {
"type": "string"
},
"adYn": {
"type": "string"
},
"resultMessage": {
"type": "string"
},
"senderGroupingKey": {
"type": "string"
},
"recipientGroupingKey": {
"type": "string"
}
}
},
"listMessageStatusResponse": {
"type": "object",
"properties": {
"header": {
"$ref": "#/components/schemas/responseHeaderModel"
},
"body": {
"$ref": "#/components/schemas/responseCollectionBodyModel_listMessageStatusResponseData"
}
}
},
"listMessageStatusResponseData": {
"type": "object",
"properties": {
"messageType": {
"type": "string"
},
"requestId": {
"type": "string"
},
"recipientSeq": {
"type": "integer",
"format": "int32"
},
"resultCode": {
"type": "string"
},
"resultCodeName": {
"type": "string"
},
"requestDate": {
"type": "string"
},
"resultDate": {
"type": "string"
},
"updateDate": {
"type": "string"
},
"telecomCode": {
"type": "string"
},
"telecomCodeName": {
"type": "string"
},
"senderGroupingKey": {
"type": "string"
},
"recipientGroupingKey": {
"type": "string"
}
}
},
"listSendersResponse": {
"type": "object",
"properties": {
"header": {
"$ref": "#/components/schemas/responseHeaderModel"
},
"body": {
"$ref": "#/components/schemas/responseCollectionBodyModel_listSendersResponseData"
}
}
},
"listSendersResponseData": {
"type": "object",
"properties": {
"serviceId": {
"type": "integer",
"format": "int32"
},
"sendNo": {
"type": "string"
},
"useYn": {
"type": "string"
},
"blockYn": {
"type": "string"
},
"blockReason": {
"type": "string"
},
"createDate": {
"type": "string"
},
"createUser": {
"type": "string"
},
"updateDate": {
"type": "string"
},
"updateUser": {
"type": "string"
}
}
},
"responseCollectionBodyModel_listMessagesResponseData": {
"type": "object",
"properties": {
"pageNum": {
"type": "integer",
"format": "int32",
"nullable": true
},
"pageSize": {
"type": "integer",
"format": "int32",
"nullable": true
},
"totalCount": {
"type": "integer",
"format": "int32",
"nullable": true
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/listMessagesResponseData"
}
}
}
},
"responseCollectionBodyModel_listMessageStatusResponseData": {
"type": "object",
"properties": {
"pageNum": {
"type": "integer",
"format": "int32",
"nullable": true
},
"pageSize": {
"type": "integer",
"format": "int32",
"nullable": true
},
"totalCount": {
"type": "integer",
"format": "int32",
"nullable": true
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/listMessageStatusResponseData"
}
}
}
},
"responseCollectionBodyModel_listSendersResponseData": {
"type": "object",
"properties": {
"pageNum": {
"type": "integer",
"format": "int32",
"nullable": true
},
"pageSize": {
"type": "integer",
"format": "int32",
"nullable": true
},
"totalCount": {
"type": "integer",
"format": "int32",
"nullable": true
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/listSendersResponseData"
}
}
}
},
"responseHeaderModel": {
"type": "object",
"properties": {
"isSuccessful": {
"type": "boolean"
},
"resultCode": {
"type": "integer",
"format": "int32"
},
"resultMessage": {
"type": "string"
}
}
},
"responseItemBodyModel_getMessageResponseData": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/getMessageResponseData"
}
}
},
"responseItemBodyModel_sendMessagesResponseData": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/sendMessagesResponseData"
}
}
},
"sendMessagesRequestBody": {
"type": "object",
"properties": {
"templateId": {
"type": "string"
},
"body": {
"type": "string"
},
"sendNo": {
"type": "string"
},
"requestDate": {
"type": "string"
},
"senderGroupingKey": {
"type": "string"
},
"recipientList": {
"type": "array",
"items": {
"$ref": "#/components/schemas/sendMessagesRequestRecipient"
}
},
"userId": {
"type": "string"
},
"statsId": {
"type": "string"
}
}
},
"sendMessagesRequestRecipient": {
"type": "object",
"properties": {
"recipientNo": {
"type": "string"
},
"countryCode": {
"type": "string"
},
"internationalRecipientNo": {
"type": "string"
},
"templateParameter": {
"type": "object",
"additionalProperties": {
"type": "object"
}
},
"recipientGroupingKey": {
"type": "string"
}
}
},
"sendMessagesResponse": {
"type": "object",
"properties": {
"header": {
"$ref": "#/components/schemas/responseHeaderModel"
},
"body": {
"$ref": "#/components/schemas/responseItemBodyModel_sendMessagesResponseData"
}
}
},
"sendMessagesResponseData": {
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"statusCode": {
"type": "string"
},
"senderGroupingKey": {
"type": "string"
},
"sendResultList": {
"type": "array",
"items": {
"$ref": "#/components/schemas/sendMessagesResponseResult"
}
}
}
},
"sendMessagesResponseResult": {
"type": "object",
"properties": {
"recipientNo": {
"type": "string"
},
"resultCode": {
"type": "integer",
"format": "int32"
},
"resultMessage": {
"type": "string"
},
"recipientSeq": {
"type": "integer",
"format": "int32"
},
"recipientGroupingKey": {
"type": "string"
}
}
}
},
"securitySchemes": {
"apiKeyHeader": {
"type": "apiKey",
"name": "Ocp-Apim-Subscription-Key",
"in": "header"
},
"apiKeyQuery": {
"type": "apiKey",
"name": "subscription-key",
"in": "query"
}
}
},
"security": [
{
"apiKeyHeader": []
},
{
"apiKeyQuery": []
}
]
} |
수고하셨습니다!
기존의 다른 API들은 어떻게 되어 있던가요? 그걸 참조해서 같은 식으로 하시면 될 겁니다. API에 보이는 이름은 BFF, suffix(혹은 path)는 bff일 거예요.
이건
이전 policy 파일의 이름 포맷은 어땠나요?
실제로 이게 제대로 작동이 되는지 확인해 보려면 Azure CLI 명령어를 통해 배포해 보시면 됩니다.
|
이부분에서 멘토님이 이야기하신 apiManagementApi.bicep을 그대로 활용한다는 것이 무엇인지 잘 모르겠어서 다시 질문드립니다! 바이셉 파일을 읽어보니 원래는 functionApp 과 리소스를 배포하고, 그에 맞는 api를 provisioning 하는 과정인데,
그리고 apim-setup.sh 마지막에 스웨거 문서를 추출해서 스토리지 어카운트에 저장하는 명령에 |
아래 두 API 합친 BFF 만들기
The text was updated successfully, but these errors were encountered: