@cmarket/partner-sdk 37.0.0 โ 37.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/api/embed-api.ts +133 -0
- package/api/oauth-api.ts +1 -1
- package/api/partner-api-api.ts +5 -5
- package/api/products-api.ts +1 -1
- package/api/well-known-api.ts +1 -1
- package/api.ts +2 -1
- package/base.ts +1 -1
- package/common.ts +1 -1
- package/configuration.ts +1 -1
- package/dist/api/embed-api.d.ts +68 -0
- package/dist/api/embed-api.js +133 -0
- package/dist/api/oauth-api.d.ts +1 -1
- package/dist/api/oauth-api.js +1 -1
- package/dist/api/partner-api-api.d.ts +5 -5
- package/dist/api/partner-api-api.js +5 -5
- package/dist/api/products-api.d.ts +1 -1
- package/dist/api/products-api.js +1 -1
- package/dist/api/well-known-api.d.ts +1 -1
- package/dist/api/well-known-api.js +1 -1
- package/dist/api.d.ts +2 -1
- package/dist/api.js +2 -1
- package/dist/base.d.ts +1 -1
- package/dist/base.js +1 -1
- package/dist/common.d.ts +1 -1
- package/dist/common.js +1 -1
- package/dist/configuration.d.ts +1 -1
- package/dist/configuration.js +1 -1
- package/dist/esm/api/embed-api.d.ts +68 -0
- package/dist/esm/api/embed-api.js +126 -0
- package/dist/esm/api/oauth-api.d.ts +1 -1
- package/dist/esm/api/oauth-api.js +1 -1
- package/dist/esm/api/partner-api-api.d.ts +5 -5
- package/dist/esm/api/partner-api-api.js +5 -5
- package/dist/esm/api/products-api.d.ts +1 -1
- package/dist/esm/api/products-api.js +1 -1
- package/dist/esm/api/well-known-api.d.ts +1 -1
- package/dist/esm/api/well-known-api.js +1 -1
- package/dist/esm/api.d.ts +2 -1
- package/dist/esm/api.js +2 -1
- package/dist/esm/base.d.ts +1 -1
- package/dist/esm/base.js +1 -1
- package/dist/esm/common.d.ts +1 -1
- package/dist/esm/common.js +1 -1
- package/dist/esm/configuration.d.ts +1 -1
- package/dist/esm/configuration.js +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/models/acceptance-result-response-dto.d.ts +1 -1
- package/dist/esm/models/acceptance-result-response-dto.js +1 -1
- package/dist/esm/models/acknowledge-product-receipt200-response.d.ts +1 -1
- package/dist/esm/models/acknowledge-product-receipt200-response.js +1 -1
- package/dist/esm/models/acknowledge-products-request-dto.d.ts +1 -1
- package/dist/esm/models/acknowledge-products-request-dto.js +1 -1
- package/dist/esm/models/api-catalog-dto.d.ts +1 -1
- package/dist/esm/models/api-catalog-dto.js +1 -1
- package/dist/esm/models/api-catalog-entry-dto.d.ts +1 -1
- package/dist/esm/models/api-catalog-entry-dto.js +1 -1
- package/dist/esm/models/api-catalog-link-dto.d.ts +1 -1
- package/dist/esm/models/api-catalog-link-dto.js +1 -1
- package/dist/esm/models/authorization-server-metadata-dto.d.ts +1 -1
- package/dist/esm/models/authorization-server-metadata-dto.js +1 -1
- package/dist/esm/models/award-method-public.d.ts +1 -1
- package/dist/esm/models/award-method-public.js +1 -1
- package/dist/esm/models/award-registered-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/award-registered-v2-response-dto.js +1 -1
- package/dist/esm/models/award-reverted-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/award-reverted-v2-response-dto.js +1 -1
- package/dist/esm/models/bid-acceptance-dto.d.ts +1 -1
- package/dist/esm/models/bid-acceptance-dto.js +1 -1
- package/dist/esm/models/bid-attachment-input-dto.d.ts +1 -1
- package/dist/esm/models/bid-attachment-input-dto.js +1 -1
- package/dist/esm/models/bid-bond-dto.d.ts +1 -1
- package/dist/esm/models/bid-bond-dto.js +1 -1
- package/dist/esm/models/bid-cancelled-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-cancelled-response-dto.js +1 -1
- package/dist/esm/models/bid-contact-dto.d.ts +1 -1
- package/dist/esm/models/bid-contact-dto.js +1 -1
- package/dist/esm/models/bid-contacts-dto.d.ts +1 -1
- package/dist/esm/models/bid-contacts-dto.js +1 -1
- package/dist/esm/models/bid-contract-document-dto.d.ts +1 -1
- package/dist/esm/models/bid-contract-document-dto.js +1 -1
- package/dist/esm/models/bid-delivery-terms-dto.d.ts +1 -1
- package/dist/esm/models/bid-delivery-terms-dto.js +1 -1
- package/dist/esm/models/bid-detail-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-detail-response-dto.js +1 -1
- package/dist/esm/models/bid-document-dto.d.ts +1 -1
- package/dist/esm/models/bid-document-dto.js +1 -1
- package/dist/esm/models/bid-failed-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-failed-v2-response-dto.js +1 -1
- package/dist/esm/models/bid-item-dto.d.ts +1 -1
- package/dist/esm/models/bid-item-dto.js +1 -1
- package/dist/esm/models/bid-lifecycle-dto.d.ts +1 -1
- package/dist/esm/models/bid-lifecycle-dto.js +1 -1
- package/dist/esm/models/bid-manager-dto.d.ts +1 -1
- package/dist/esm/models/bid-manager-dto.js +1 -1
- package/dist/esm/models/bid-payment-terms-dto.d.ts +1 -1
- package/dist/esm/models/bid-payment-terms-dto.js +1 -1
- package/dist/esm/models/bid-product-dto.d.ts +1 -1
- package/dist/esm/models/bid-product-dto.js +1 -1
- package/dist/esm/models/bid-public-status.d.ts +1 -1
- package/dist/esm/models/bid-public-status.js +1 -1
- package/dist/esm/models/bid-registered-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-registered-response-dto.js +1 -1
- package/dist/esm/models/bid-result-participant-attachment-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-participant-attachment-dto.js +1 -1
- package/dist/esm/models/bid-result-participant-dto.d.ts +1 -1
- package/dist/esm/models/bid-result-participant-dto.js +1 -1
- package/dist/esm/models/bid-results-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-results-response-dto.js +1 -1
- package/dist/esm/models/bid-settlement-line-item-dto.d.ts +1 -1
- package/dist/esm/models/bid-settlement-line-item-dto.js +1 -1
- package/dist/esm/models/bid-settlement-participant-dto.d.ts +1 -1
- package/dist/esm/models/bid-settlement-participant-dto.js +1 -1
- package/dist/esm/models/bid-settlement-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-settlement-response-dto.js +1 -1
- package/dist/esm/models/bid-statement-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-statement-response-dto.js +1 -1
- package/dist/esm/models/bid-summary-dto.d.ts +1 -1
- package/dist/esm/models/bid-summary-dto.js +1 -1
- package/dist/esm/models/bid-type-public.d.ts +1 -1
- package/dist/esm/models/bid-type-public.js +1 -1
- package/dist/esm/models/bid-updated-response-dto.d.ts +1 -1
- package/dist/esm/models/bid-updated-response-dto.js +1 -1
- package/dist/esm/models/cancel-bid-request-dto.d.ts +1 -1
- package/dist/esm/models/cancel-bid-request-dto.js +1 -1
- package/dist/esm/models/cancel-bid200-response.d.ts +1 -1
- package/dist/esm/models/cancel-bid200-response.js +1 -1
- package/dist/esm/models/card-payment-request-response-dto.d.ts +1 -1
- package/dist/esm/models/card-payment-request-response-dto.js +1 -1
- package/dist/esm/models/complete-acceptance-request-dto.d.ts +1 -1
- package/dist/esm/models/complete-acceptance-request-dto.js +1 -1
- package/dist/esm/models/complete-acceptance200-response.d.ts +1 -1
- package/dist/esm/models/complete-acceptance200-response.js +1 -1
- package/dist/esm/models/complete-invoice200-response.d.ts +1 -1
- package/dist/esm/models/complete-invoice200-response.js +1 -1
- package/dist/esm/models/complete-upload-request-dto.d.ts +1 -1
- package/dist/esm/models/complete-upload-request-dto.js +1 -1
- package/dist/esm/models/contract-restriction-confirm-input-dto.d.ts +1 -1
- package/dist/esm/models/contract-restriction-confirm-input-dto.js +1 -1
- package/dist/esm/models/create-bid-request-dto.d.ts +1 -1
- package/dist/esm/models/create-bid-request-dto.js +1 -1
- package/dist/esm/models/create-card-payment-dto.d.ts +1 -1
- package/dist/esm/models/create-card-payment-dto.js +1 -1
- package/dist/esm/models/create-card-payment-request-dto.d.ts +1 -1
- package/dist/esm/models/create-card-payment-request-dto.js +1 -1
- package/dist/esm/models/create-card-payment200-response.d.ts +1 -1
- package/dist/esm/models/create-card-payment200-response.js +1 -1
- package/dist/esm/models/create-embed-launch201-response.d.ts +21 -0
- package/dist/esm/models/create-embed-launch201-response.js +14 -0
- package/dist/esm/models/create-external-contract-documents-request-dto.d.ts +1 -1
- package/dist/esm/models/create-external-contract-documents-request-dto.js +1 -1
- package/dist/esm/models/create-external-contract-documents-response-dto.d.ts +1 -1
- package/dist/esm/models/create-external-contract-documents-response-dto.js +1 -1
- package/dist/esm/models/create-file-upload-url201-response.d.ts +1 -1
- package/dist/esm/models/create-file-upload-url201-response.js +1 -1
- package/dist/esm/models/create-upload-url-request-dto.d.ts +1 -1
- package/dist/esm/models/create-upload-url-request-dto.js +1 -1
- package/dist/esm/models/delivery-date-type-public.d.ts +1 -1
- package/dist/esm/models/delivery-date-type-public.js +1 -1
- package/dist/esm/models/delivery-method-public.d.ts +1 -1
- package/dist/esm/models/delivery-method-public.js +1 -1
- package/dist/esm/models/embed-launch-request-dto.d.ts +47 -0
- package/dist/esm/models/embed-launch-request-dto.js +29 -0
- package/dist/esm/models/embed-launch-response-dto.d.ts +21 -0
- package/dist/esm/models/embed-launch-response-dto.js +14 -0
- package/dist/esm/models/excellent-procurement-public.d.ts +1 -1
- package/dist/esm/models/excellent-procurement-public.js +1 -1
- package/dist/esm/models/external-contract-document-item-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-document-item-dto.js +1 -1
- package/dist/esm/models/external-contract-documents-response-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-documents-response-dto.js +1 -1
- package/dist/esm/models/external-contract-item-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-item-dto.js +1 -1
- package/dist/esm/models/external-contract-snapshot-dto.d.ts +1 -1
- package/dist/esm/models/external-contract-snapshot-dto.js +1 -1
- package/dist/esm/models/external-document-inputs-dto.d.ts +1 -1
- package/dist/esm/models/external-document-inputs-dto.js +1 -1
- package/dist/esm/models/file-meta-response-dto.d.ts +1 -1
- package/dist/esm/models/file-meta-response-dto.js +1 -1
- package/dist/esm/models/file-uploaded-response-dto.d.ts +1 -1
- package/dist/esm/models/file-uploaded-response-dto.js +1 -1
- package/dist/esm/models/generated-external-contract-document-dto.d.ts +1 -1
- package/dist/esm/models/generated-external-contract-document-dto.js +1 -1
- package/dist/esm/models/get-bid-settlement200-response.d.ts +1 -1
- package/dist/esm/models/get-bid-settlement200-response.js +1 -1
- package/dist/esm/models/get-bid-statement200-response.d.ts +1 -1
- package/dist/esm/models/get-bid-statement200-response.js +1 -1
- package/dist/esm/models/get-bid200-response.d.ts +1 -1
- package/dist/esm/models/get-bid200-response.js +1 -1
- package/dist/esm/models/get-file-meta200-response.d.ts +1 -1
- package/dist/esm/models/get-file-meta200-response.js +1 -1
- package/dist/esm/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
- package/dist/esm/models/get-supplier-card-payable-v2200-response.js +1 -1
- package/dist/esm/models/green-product-public.d.ts +1 -1
- package/dist/esm/models/green-product-public.js +1 -1
- package/dist/esm/models/health-controller-check200-response.d.ts +1 -1
- package/dist/esm/models/health-controller-check200-response.js +1 -1
- package/dist/esm/models/health-response-dto.d.ts +1 -1
- package/dist/esm/models/health-response-dto.js +1 -1
- package/dist/esm/models/hierarchical-region-dto.d.ts +1 -1
- package/dist/esm/models/hierarchical-region-dto.js +1 -1
- package/dist/esm/models/index.d.ts +3 -0
- package/dist/esm/models/index.js +3 -0
- package/dist/esm/models/introspect-request-dto.d.ts +1 -1
- package/dist/esm/models/introspect-request-dto.js +1 -1
- package/dist/esm/models/introspection-response-dto.d.ts +1 -1
- package/dist/esm/models/introspection-response-dto.js +1 -1
- package/dist/esm/models/invalid-param-dto.d.ts +1 -1
- package/dist/esm/models/invalid-param-dto.js +1 -1
- package/dist/esm/models/invoice-completed-response-dto.d.ts +1 -1
- package/dist/esm/models/invoice-completed-response-dto.js +1 -1
- package/dist/esm/models/invoice-split-response-dto.d.ts +1 -1
- package/dist/esm/models/invoice-split-response-dto.js +1 -1
- package/dist/esm/models/legal-mandatory-public.d.ts +1 -1
- package/dist/esm/models/legal-mandatory-public.js +1 -1
- package/dist/esm/models/list-bid-results200-response.d.ts +1 -1
- package/dist/esm/models/list-bid-results200-response.js +1 -1
- package/dist/esm/models/list-bids-response-dto.d.ts +1 -1
- package/dist/esm/models/list-bids-response-dto.js +1 -1
- package/dist/esm/models/list-bids200-response.d.ts +1 -1
- package/dist/esm/models/list-bids200-response.js +1 -1
- package/dist/esm/models/list-products200-response.d.ts +1 -1
- package/dist/esm/models/list-products200-response.js +1 -1
- package/dist/esm/models/mark-bid-failed-request-dto.d.ts +1 -1
- package/dist/esm/models/mark-bid-failed-request-dto.js +1 -1
- package/dist/esm/models/mark-bid-failed201-response.d.ts +1 -1
- package/dist/esm/models/mark-bid-failed201-response.js +1 -1
- package/dist/esm/models/negotiation-score-dto.d.ts +1 -1
- package/dist/esm/models/negotiation-score-dto.js +1 -1
- package/dist/esm/models/negotiation-scored-v2-response-dto.d.ts +1 -1
- package/dist/esm/models/negotiation-scored-v2-response-dto.js +1 -1
- package/dist/esm/models/oauth-error-response-dto.d.ts +1 -1
- package/dist/esm/models/oauth-error-response-dto.js +1 -1
- package/dist/esm/models/payment-method-public.d.ts +1 -1
- package/dist/esm/models/payment-method-public.js +1 -1
- package/dist/esm/models/preconditions-dto.d.ts +1 -1
- package/dist/esm/models/preconditions-dto.js +1 -1
- package/dist/esm/models/problem-details-dto.d.ts +1 -1
- package/dist/esm/models/problem-details-dto.js +1 -1
- package/dist/esm/models/product-receipt-response-dto.d.ts +1 -1
- package/dist/esm/models/product-receipt-response-dto.js +1 -1
- package/dist/esm/models/product-response-dto.d.ts +1 -1
- package/dist/esm/models/product-response-dto.js +1 -1
- package/dist/esm/models/protected-resource-metadata-dto.d.ts +1 -1
- package/dist/esm/models/protected-resource-metadata-dto.js +1 -1
- package/dist/esm/models/register-award-request-dto.d.ts +1 -1
- package/dist/esm/models/register-award-request-dto.js +1 -1
- package/dist/esm/models/register-award201-response.d.ts +1 -1
- package/dist/esm/models/register-award201-response.js +1 -1
- package/dist/esm/models/register-bid201-response.d.ts +1 -1
- package/dist/esm/models/register-bid201-response.js +1 -1
- package/dist/esm/models/register-semo-contract-request-dto.d.ts +1 -1
- package/dist/esm/models/register-semo-contract-request-dto.js +1 -1
- package/dist/esm/models/request-invoice-split-request-dto.d.ts +1 -1
- package/dist/esm/models/request-invoice-split-request-dto.js +1 -1
- package/dist/esm/models/request-invoice-split200-response.d.ts +1 -1
- package/dist/esm/models/request-invoice-split200-response.js +1 -1
- package/dist/esm/models/retiree-roster-input-dto.d.ts +1 -1
- package/dist/esm/models/retiree-roster-input-dto.js +1 -1
- package/dist/esm/models/retiree-roster-row-dto.d.ts +1 -1
- package/dist/esm/models/retiree-roster-row-dto.js +1 -1
- package/dist/esm/models/revert-award-request-dto.d.ts +1 -1
- package/dist/esm/models/revert-award-request-dto.js +1 -1
- package/dist/esm/models/revert-award200-response.d.ts +1 -1
- package/dist/esm/models/revert-award200-response.js +1 -1
- package/dist/esm/models/revoke-request-dto.d.ts +1 -1
- package/dist/esm/models/revoke-request-dto.js +1 -1
- package/dist/esm/models/semo-contract-registered-response-dto.d.ts +1 -1
- package/dist/esm/models/semo-contract-registered-response-dto.js +1 -1
- package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
- package/dist/esm/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
- package/dist/esm/models/statement-document-dto.d.ts +1 -1
- package/dist/esm/models/statement-document-dto.js +1 -1
- package/dist/esm/models/statement-product-dto.d.ts +1 -1
- package/dist/esm/models/statement-product-dto.js +1 -1
- package/dist/esm/models/submit-negotiation-scores-request-dto.d.ts +1 -1
- package/dist/esm/models/submit-negotiation-scores-request-dto.js +1 -1
- package/dist/esm/models/submit-negotiation-scores201-response.d.ts +1 -1
- package/dist/esm/models/submit-negotiation-scores201-response.js +1 -1
- package/dist/esm/models/supplier-card-payable-response-dto.d.ts +1 -1
- package/dist/esm/models/supplier-card-payable-response-dto.js +1 -1
- package/dist/esm/models/supplier-tax-type.d.ts +1 -1
- package/dist/esm/models/supplier-tax-type.js +1 -1
- package/dist/esm/models/token-request-dto.d.ts +1 -1
- package/dist/esm/models/token-request-dto.js +1 -1
- package/dist/esm/models/token-response-dto.d.ts +1 -1
- package/dist/esm/models/token-response-dto.js +1 -1
- package/dist/esm/models/update-bid-request-dto.d.ts +1 -1
- package/dist/esm/models/update-bid-request-dto.js +1 -1
- package/dist/esm/models/update-bid200-response.d.ts +1 -1
- package/dist/esm/models/update-bid200-response.js +1 -1
- package/dist/esm/models/upload-file-request-dto.d.ts +1 -1
- package/dist/esm/models/upload-file-request-dto.js +1 -1
- package/dist/esm/models/upload-file201-response.d.ts +1 -1
- package/dist/esm/models/upload-file201-response.js +1 -1
- package/dist/esm/models/upload-url-created-response-dto.d.ts +1 -1
- package/dist/esm/models/upload-url-created-response-dto.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/models/acceptance-result-response-dto.d.ts +1 -1
- package/dist/models/acceptance-result-response-dto.js +1 -1
- package/dist/models/acknowledge-product-receipt200-response.d.ts +1 -1
- package/dist/models/acknowledge-product-receipt200-response.js +1 -1
- package/dist/models/acknowledge-products-request-dto.d.ts +1 -1
- package/dist/models/acknowledge-products-request-dto.js +1 -1
- package/dist/models/api-catalog-dto.d.ts +1 -1
- package/dist/models/api-catalog-dto.js +1 -1
- package/dist/models/api-catalog-entry-dto.d.ts +1 -1
- package/dist/models/api-catalog-entry-dto.js +1 -1
- package/dist/models/api-catalog-link-dto.d.ts +1 -1
- package/dist/models/api-catalog-link-dto.js +1 -1
- package/dist/models/authorization-server-metadata-dto.d.ts +1 -1
- package/dist/models/authorization-server-metadata-dto.js +1 -1
- package/dist/models/award-method-public.d.ts +1 -1
- package/dist/models/award-method-public.js +1 -1
- package/dist/models/award-registered-v2-response-dto.d.ts +1 -1
- package/dist/models/award-registered-v2-response-dto.js +1 -1
- package/dist/models/award-reverted-v2-response-dto.d.ts +1 -1
- package/dist/models/award-reverted-v2-response-dto.js +1 -1
- package/dist/models/bid-acceptance-dto.d.ts +1 -1
- package/dist/models/bid-acceptance-dto.js +1 -1
- package/dist/models/bid-attachment-input-dto.d.ts +1 -1
- package/dist/models/bid-attachment-input-dto.js +1 -1
- package/dist/models/bid-bond-dto.d.ts +1 -1
- package/dist/models/bid-bond-dto.js +1 -1
- package/dist/models/bid-cancelled-response-dto.d.ts +1 -1
- package/dist/models/bid-cancelled-response-dto.js +1 -1
- package/dist/models/bid-contact-dto.d.ts +1 -1
- package/dist/models/bid-contact-dto.js +1 -1
- package/dist/models/bid-contacts-dto.d.ts +1 -1
- package/dist/models/bid-contacts-dto.js +1 -1
- package/dist/models/bid-contract-document-dto.d.ts +1 -1
- package/dist/models/bid-contract-document-dto.js +1 -1
- package/dist/models/bid-delivery-terms-dto.d.ts +1 -1
- package/dist/models/bid-delivery-terms-dto.js +1 -1
- package/dist/models/bid-detail-response-dto.d.ts +1 -1
- package/dist/models/bid-detail-response-dto.js +1 -1
- package/dist/models/bid-document-dto.d.ts +1 -1
- package/dist/models/bid-document-dto.js +1 -1
- package/dist/models/bid-failed-v2-response-dto.d.ts +1 -1
- package/dist/models/bid-failed-v2-response-dto.js +1 -1
- package/dist/models/bid-item-dto.d.ts +1 -1
- package/dist/models/bid-item-dto.js +1 -1
- package/dist/models/bid-lifecycle-dto.d.ts +1 -1
- package/dist/models/bid-lifecycle-dto.js +1 -1
- package/dist/models/bid-manager-dto.d.ts +1 -1
- package/dist/models/bid-manager-dto.js +1 -1
- package/dist/models/bid-payment-terms-dto.d.ts +1 -1
- package/dist/models/bid-payment-terms-dto.js +1 -1
- package/dist/models/bid-product-dto.d.ts +1 -1
- package/dist/models/bid-product-dto.js +1 -1
- package/dist/models/bid-public-status.d.ts +1 -1
- package/dist/models/bid-public-status.js +1 -1
- package/dist/models/bid-registered-response-dto.d.ts +1 -1
- package/dist/models/bid-registered-response-dto.js +1 -1
- package/dist/models/bid-result-participant-attachment-dto.d.ts +1 -1
- package/dist/models/bid-result-participant-attachment-dto.js +1 -1
- package/dist/models/bid-result-participant-dto.d.ts +1 -1
- package/dist/models/bid-result-participant-dto.js +1 -1
- package/dist/models/bid-results-response-dto.d.ts +1 -1
- package/dist/models/bid-results-response-dto.js +1 -1
- package/dist/models/bid-settlement-line-item-dto.d.ts +1 -1
- package/dist/models/bid-settlement-line-item-dto.js +1 -1
- package/dist/models/bid-settlement-participant-dto.d.ts +1 -1
- package/dist/models/bid-settlement-participant-dto.js +1 -1
- package/dist/models/bid-settlement-response-dto.d.ts +1 -1
- package/dist/models/bid-settlement-response-dto.js +1 -1
- package/dist/models/bid-statement-response-dto.d.ts +1 -1
- package/dist/models/bid-statement-response-dto.js +1 -1
- package/dist/models/bid-summary-dto.d.ts +1 -1
- package/dist/models/bid-summary-dto.js +1 -1
- package/dist/models/bid-type-public.d.ts +1 -1
- package/dist/models/bid-type-public.js +1 -1
- package/dist/models/bid-updated-response-dto.d.ts +1 -1
- package/dist/models/bid-updated-response-dto.js +1 -1
- package/dist/models/cancel-bid-request-dto.d.ts +1 -1
- package/dist/models/cancel-bid-request-dto.js +1 -1
- package/dist/models/cancel-bid200-response.d.ts +1 -1
- package/dist/models/cancel-bid200-response.js +1 -1
- package/dist/models/card-payment-request-response-dto.d.ts +1 -1
- package/dist/models/card-payment-request-response-dto.js +1 -1
- package/dist/models/complete-acceptance-request-dto.d.ts +1 -1
- package/dist/models/complete-acceptance-request-dto.js +1 -1
- package/dist/models/complete-acceptance200-response.d.ts +1 -1
- package/dist/models/complete-acceptance200-response.js +1 -1
- package/dist/models/complete-invoice200-response.d.ts +1 -1
- package/dist/models/complete-invoice200-response.js +1 -1
- package/dist/models/complete-upload-request-dto.d.ts +1 -1
- package/dist/models/complete-upload-request-dto.js +1 -1
- package/dist/models/contract-restriction-confirm-input-dto.d.ts +1 -1
- package/dist/models/contract-restriction-confirm-input-dto.js +1 -1
- package/dist/models/create-bid-request-dto.d.ts +1 -1
- package/dist/models/create-bid-request-dto.js +1 -1
- package/dist/models/create-card-payment-dto.d.ts +1 -1
- package/dist/models/create-card-payment-dto.js +1 -1
- package/dist/models/create-card-payment-request-dto.d.ts +1 -1
- package/dist/models/create-card-payment-request-dto.js +1 -1
- package/dist/models/create-card-payment200-response.d.ts +1 -1
- package/dist/models/create-card-payment200-response.js +1 -1
- package/dist/models/create-embed-launch201-response.d.ts +21 -0
- package/dist/models/create-embed-launch201-response.js +15 -0
- package/dist/models/create-external-contract-documents-request-dto.d.ts +1 -1
- package/dist/models/create-external-contract-documents-request-dto.js +1 -1
- package/dist/models/create-external-contract-documents-response-dto.d.ts +1 -1
- package/dist/models/create-external-contract-documents-response-dto.js +1 -1
- package/dist/models/create-file-upload-url201-response.d.ts +1 -1
- package/dist/models/create-file-upload-url201-response.js +1 -1
- package/dist/models/create-upload-url-request-dto.d.ts +1 -1
- package/dist/models/create-upload-url-request-dto.js +1 -1
- package/dist/models/delivery-date-type-public.d.ts +1 -1
- package/dist/models/delivery-date-type-public.js +1 -1
- package/dist/models/delivery-method-public.d.ts +1 -1
- package/dist/models/delivery-method-public.js +1 -1
- package/dist/models/embed-launch-request-dto.d.ts +47 -0
- package/dist/models/embed-launch-request-dto.js +32 -0
- package/dist/models/embed-launch-response-dto.d.ts +21 -0
- package/dist/models/embed-launch-response-dto.js +15 -0
- package/dist/models/excellent-procurement-public.d.ts +1 -1
- package/dist/models/excellent-procurement-public.js +1 -1
- package/dist/models/external-contract-document-item-dto.d.ts +1 -1
- package/dist/models/external-contract-document-item-dto.js +1 -1
- package/dist/models/external-contract-documents-response-dto.d.ts +1 -1
- package/dist/models/external-contract-documents-response-dto.js +1 -1
- package/dist/models/external-contract-item-dto.d.ts +1 -1
- package/dist/models/external-contract-item-dto.js +1 -1
- package/dist/models/external-contract-snapshot-dto.d.ts +1 -1
- package/dist/models/external-contract-snapshot-dto.js +1 -1
- package/dist/models/external-document-inputs-dto.d.ts +1 -1
- package/dist/models/external-document-inputs-dto.js +1 -1
- package/dist/models/file-meta-response-dto.d.ts +1 -1
- package/dist/models/file-meta-response-dto.js +1 -1
- package/dist/models/file-uploaded-response-dto.d.ts +1 -1
- package/dist/models/file-uploaded-response-dto.js +1 -1
- package/dist/models/generated-external-contract-document-dto.d.ts +1 -1
- package/dist/models/generated-external-contract-document-dto.js +1 -1
- package/dist/models/get-bid-settlement200-response.d.ts +1 -1
- package/dist/models/get-bid-settlement200-response.js +1 -1
- package/dist/models/get-bid-statement200-response.d.ts +1 -1
- package/dist/models/get-bid-statement200-response.js +1 -1
- package/dist/models/get-bid200-response.d.ts +1 -1
- package/dist/models/get-bid200-response.js +1 -1
- package/dist/models/get-file-meta200-response.d.ts +1 -1
- package/dist/models/get-file-meta200-response.js +1 -1
- package/dist/models/get-supplier-card-payable-v2200-response.d.ts +1 -1
- package/dist/models/get-supplier-card-payable-v2200-response.js +1 -1
- package/dist/models/green-product-public.d.ts +1 -1
- package/dist/models/green-product-public.js +1 -1
- package/dist/models/health-controller-check200-response.d.ts +1 -1
- package/dist/models/health-controller-check200-response.js +1 -1
- package/dist/models/health-response-dto.d.ts +1 -1
- package/dist/models/health-response-dto.js +1 -1
- package/dist/models/hierarchical-region-dto.d.ts +1 -1
- package/dist/models/hierarchical-region-dto.js +1 -1
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.js +3 -0
- package/dist/models/introspect-request-dto.d.ts +1 -1
- package/dist/models/introspect-request-dto.js +1 -1
- package/dist/models/introspection-response-dto.d.ts +1 -1
- package/dist/models/introspection-response-dto.js +1 -1
- package/dist/models/invalid-param-dto.d.ts +1 -1
- package/dist/models/invalid-param-dto.js +1 -1
- package/dist/models/invoice-completed-response-dto.d.ts +1 -1
- package/dist/models/invoice-completed-response-dto.js +1 -1
- package/dist/models/invoice-split-response-dto.d.ts +1 -1
- package/dist/models/invoice-split-response-dto.js +1 -1
- package/dist/models/legal-mandatory-public.d.ts +1 -1
- package/dist/models/legal-mandatory-public.js +1 -1
- package/dist/models/list-bid-results200-response.d.ts +1 -1
- package/dist/models/list-bid-results200-response.js +1 -1
- package/dist/models/list-bids-response-dto.d.ts +1 -1
- package/dist/models/list-bids-response-dto.js +1 -1
- package/dist/models/list-bids200-response.d.ts +1 -1
- package/dist/models/list-bids200-response.js +1 -1
- package/dist/models/list-products200-response.d.ts +1 -1
- package/dist/models/list-products200-response.js +1 -1
- package/dist/models/mark-bid-failed-request-dto.d.ts +1 -1
- package/dist/models/mark-bid-failed-request-dto.js +1 -1
- package/dist/models/mark-bid-failed201-response.d.ts +1 -1
- package/dist/models/mark-bid-failed201-response.js +1 -1
- package/dist/models/negotiation-score-dto.d.ts +1 -1
- package/dist/models/negotiation-score-dto.js +1 -1
- package/dist/models/negotiation-scored-v2-response-dto.d.ts +1 -1
- package/dist/models/negotiation-scored-v2-response-dto.js +1 -1
- package/dist/models/oauth-error-response-dto.d.ts +1 -1
- package/dist/models/oauth-error-response-dto.js +1 -1
- package/dist/models/payment-method-public.d.ts +1 -1
- package/dist/models/payment-method-public.js +1 -1
- package/dist/models/preconditions-dto.d.ts +1 -1
- package/dist/models/preconditions-dto.js +1 -1
- package/dist/models/problem-details-dto.d.ts +1 -1
- package/dist/models/problem-details-dto.js +1 -1
- package/dist/models/product-receipt-response-dto.d.ts +1 -1
- package/dist/models/product-receipt-response-dto.js +1 -1
- package/dist/models/product-response-dto.d.ts +1 -1
- package/dist/models/product-response-dto.js +1 -1
- package/dist/models/protected-resource-metadata-dto.d.ts +1 -1
- package/dist/models/protected-resource-metadata-dto.js +1 -1
- package/dist/models/register-award-request-dto.d.ts +1 -1
- package/dist/models/register-award-request-dto.js +1 -1
- package/dist/models/register-award201-response.d.ts +1 -1
- package/dist/models/register-award201-response.js +1 -1
- package/dist/models/register-bid201-response.d.ts +1 -1
- package/dist/models/register-bid201-response.js +1 -1
- package/dist/models/register-semo-contract-request-dto.d.ts +1 -1
- package/dist/models/register-semo-contract-request-dto.js +1 -1
- package/dist/models/request-invoice-split-request-dto.d.ts +1 -1
- package/dist/models/request-invoice-split-request-dto.js +1 -1
- package/dist/models/request-invoice-split200-response.d.ts +1 -1
- package/dist/models/request-invoice-split200-response.js +1 -1
- package/dist/models/retiree-roster-input-dto.d.ts +1 -1
- package/dist/models/retiree-roster-input-dto.js +1 -1
- package/dist/models/retiree-roster-row-dto.d.ts +1 -1
- package/dist/models/retiree-roster-row-dto.js +1 -1
- package/dist/models/revert-award-request-dto.d.ts +1 -1
- package/dist/models/revert-award-request-dto.js +1 -1
- package/dist/models/revert-award200-response.d.ts +1 -1
- package/dist/models/revert-award200-response.js +1 -1
- package/dist/models/revoke-request-dto.d.ts +1 -1
- package/dist/models/revoke-request-dto.js +1 -1
- package/dist/models/semo-contract-registered-response-dto.d.ts +1 -1
- package/dist/models/semo-contract-registered-response-dto.js +1 -1
- package/dist/models/semo-contract-taxinvoice-status-response-dto.d.ts +1 -1
- package/dist/models/semo-contract-taxinvoice-status-response-dto.js +1 -1
- package/dist/models/statement-document-dto.d.ts +1 -1
- package/dist/models/statement-document-dto.js +1 -1
- package/dist/models/statement-product-dto.d.ts +1 -1
- package/dist/models/statement-product-dto.js +1 -1
- package/dist/models/submit-negotiation-scores-request-dto.d.ts +1 -1
- package/dist/models/submit-negotiation-scores-request-dto.js +1 -1
- package/dist/models/submit-negotiation-scores201-response.d.ts +1 -1
- package/dist/models/submit-negotiation-scores201-response.js +1 -1
- package/dist/models/supplier-card-payable-response-dto.d.ts +1 -1
- package/dist/models/supplier-card-payable-response-dto.js +1 -1
- package/dist/models/supplier-tax-type.d.ts +1 -1
- package/dist/models/supplier-tax-type.js +1 -1
- package/dist/models/token-request-dto.d.ts +1 -1
- package/dist/models/token-request-dto.js +1 -1
- package/dist/models/token-response-dto.d.ts +1 -1
- package/dist/models/token-response-dto.js +1 -1
- package/dist/models/update-bid-request-dto.d.ts +1 -1
- package/dist/models/update-bid-request-dto.js +1 -1
- package/dist/models/update-bid200-response.d.ts +1 -1
- package/dist/models/update-bid200-response.js +1 -1
- package/dist/models/upload-file-request-dto.d.ts +1 -1
- package/dist/models/upload-file-request-dto.js +1 -1
- package/dist/models/upload-file201-response.d.ts +1 -1
- package/dist/models/upload-file201-response.js +1 -1
- package/dist/models/upload-url-created-response-dto.d.ts +1 -1
- package/dist/models/upload-url-created-response-dto.js +1 -1
- package/docs/CreateEmbedLaunch201Response.md +22 -0
- package/docs/EmbedApi.md +68 -0
- package/docs/EmbedLaunchRequestDto.md +26 -0
- package/docs/EmbedLaunchResponseDto.md +22 -0
- package/docs/PartnerApiApi.md +1 -1
- package/index.ts +1 -1
- package/models/acceptance-result-response-dto.ts +1 -1
- package/models/acknowledge-product-receipt200-response.ts +1 -1
- package/models/acknowledge-products-request-dto.ts +1 -1
- package/models/api-catalog-dto.ts +1 -1
- package/models/api-catalog-entry-dto.ts +1 -1
- package/models/api-catalog-link-dto.ts +1 -1
- package/models/authorization-server-metadata-dto.ts +1 -1
- package/models/award-method-public.ts +1 -1
- package/models/award-registered-v2-response-dto.ts +1 -1
- package/models/award-reverted-v2-response-dto.ts +1 -1
- package/models/bid-acceptance-dto.ts +1 -1
- package/models/bid-attachment-input-dto.ts +1 -1
- package/models/bid-bond-dto.ts +1 -1
- package/models/bid-cancelled-response-dto.ts +1 -1
- package/models/bid-contact-dto.ts +1 -1
- package/models/bid-contacts-dto.ts +1 -1
- package/models/bid-contract-document-dto.ts +1 -1
- package/models/bid-delivery-terms-dto.ts +1 -1
- package/models/bid-detail-response-dto.ts +1 -1
- package/models/bid-document-dto.ts +1 -1
- package/models/bid-failed-v2-response-dto.ts +1 -1
- package/models/bid-item-dto.ts +1 -1
- package/models/bid-lifecycle-dto.ts +1 -1
- package/models/bid-manager-dto.ts +1 -1
- package/models/bid-payment-terms-dto.ts +1 -1
- package/models/bid-product-dto.ts +1 -1
- package/models/bid-public-status.ts +1 -1
- package/models/bid-registered-response-dto.ts +1 -1
- package/models/bid-result-participant-attachment-dto.ts +1 -1
- package/models/bid-result-participant-dto.ts +1 -1
- package/models/bid-results-response-dto.ts +1 -1
- package/models/bid-settlement-line-item-dto.ts +1 -1
- package/models/bid-settlement-participant-dto.ts +1 -1
- package/models/bid-settlement-response-dto.ts +1 -1
- package/models/bid-statement-response-dto.ts +1 -1
- package/models/bid-summary-dto.ts +1 -1
- package/models/bid-type-public.ts +1 -1
- package/models/bid-updated-response-dto.ts +1 -1
- package/models/cancel-bid-request-dto.ts +1 -1
- package/models/cancel-bid200-response.ts +1 -1
- package/models/card-payment-request-response-dto.ts +1 -1
- package/models/complete-acceptance-request-dto.ts +1 -1
- package/models/complete-acceptance200-response.ts +1 -1
- package/models/complete-invoice200-response.ts +1 -1
- package/models/complete-upload-request-dto.ts +1 -1
- package/models/contract-restriction-confirm-input-dto.ts +1 -1
- package/models/create-bid-request-dto.ts +1 -1
- package/models/create-card-payment-dto.ts +1 -1
- package/models/create-card-payment-request-dto.ts +1 -1
- package/models/create-card-payment200-response.ts +1 -1
- package/models/create-embed-launch201-response.ts +27 -0
- package/models/create-external-contract-documents-request-dto.ts +1 -1
- package/models/create-external-contract-documents-response-dto.ts +1 -1
- package/models/create-file-upload-url201-response.ts +1 -1
- package/models/create-upload-url-request-dto.ts +1 -1
- package/models/delivery-date-type-public.ts +1 -1
- package/models/delivery-method-public.ts +1 -1
- package/models/embed-launch-request-dto.ts +57 -0
- package/models/embed-launch-response-dto.ts +27 -0
- package/models/excellent-procurement-public.ts +1 -1
- package/models/external-contract-document-item-dto.ts +1 -1
- package/models/external-contract-documents-response-dto.ts +1 -1
- package/models/external-contract-item-dto.ts +1 -1
- package/models/external-contract-snapshot-dto.ts +1 -1
- package/models/external-document-inputs-dto.ts +1 -1
- package/models/file-meta-response-dto.ts +1 -1
- package/models/file-uploaded-response-dto.ts +1 -1
- package/models/generated-external-contract-document-dto.ts +1 -1
- package/models/get-bid-settlement200-response.ts +1 -1
- package/models/get-bid-statement200-response.ts +1 -1
- package/models/get-bid200-response.ts +1 -1
- package/models/get-file-meta200-response.ts +1 -1
- package/models/get-supplier-card-payable-v2200-response.ts +1 -1
- package/models/green-product-public.ts +1 -1
- package/models/health-controller-check200-response.ts +1 -1
- package/models/health-response-dto.ts +1 -1
- package/models/hierarchical-region-dto.ts +1 -1
- package/models/index.ts +3 -0
- package/models/introspect-request-dto.ts +1 -1
- package/models/introspection-response-dto.ts +1 -1
- package/models/invalid-param-dto.ts +1 -1
- package/models/invoice-completed-response-dto.ts +1 -1
- package/models/invoice-split-response-dto.ts +1 -1
- package/models/legal-mandatory-public.ts +1 -1
- package/models/list-bid-results200-response.ts +1 -1
- package/models/list-bids-response-dto.ts +1 -1
- package/models/list-bids200-response.ts +1 -1
- package/models/list-products200-response.ts +1 -1
- package/models/mark-bid-failed-request-dto.ts +1 -1
- package/models/mark-bid-failed201-response.ts +1 -1
- package/models/negotiation-score-dto.ts +1 -1
- package/models/negotiation-scored-v2-response-dto.ts +1 -1
- package/models/oauth-error-response-dto.ts +1 -1
- package/models/payment-method-public.ts +1 -1
- package/models/preconditions-dto.ts +1 -1
- package/models/problem-details-dto.ts +1 -1
- package/models/product-receipt-response-dto.ts +1 -1
- package/models/product-response-dto.ts +1 -1
- package/models/protected-resource-metadata-dto.ts +1 -1
- package/models/register-award-request-dto.ts +1 -1
- package/models/register-award201-response.ts +1 -1
- package/models/register-bid201-response.ts +1 -1
- package/models/register-semo-contract-request-dto.ts +1 -1
- package/models/request-invoice-split-request-dto.ts +1 -1
- package/models/request-invoice-split200-response.ts +1 -1
- package/models/retiree-roster-input-dto.ts +1 -1
- package/models/retiree-roster-row-dto.ts +1 -1
- package/models/revert-award-request-dto.ts +1 -1
- package/models/revert-award200-response.ts +1 -1
- package/models/revoke-request-dto.ts +1 -1
- package/models/semo-contract-registered-response-dto.ts +1 -1
- package/models/semo-contract-taxinvoice-status-response-dto.ts +1 -1
- package/models/statement-document-dto.ts +1 -1
- package/models/statement-product-dto.ts +1 -1
- package/models/submit-negotiation-scores-request-dto.ts +1 -1
- package/models/submit-negotiation-scores201-response.ts +1 -1
- package/models/supplier-card-payable-response-dto.ts +1 -1
- package/models/supplier-tax-type.ts +1 -1
- package/models/token-request-dto.ts +1 -1
- package/models/token-response-dto.ts +1 -1
- package/models/update-bid-request-dto.ts +1 -1
- package/models/update-bid200-response.ts +1 -1
- package/models/upload-file-request-dto.ts +1 -1
- package/models/upload-file201-response.ts +1 -1
- package/models/upload-url-created-response-dto.ts +1 -1
- package/package.json +1 -1
package/dist/configuration.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 37.
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
package/dist/configuration.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 37.
|
|
7
|
+
* The version of the OpenAPI document: 37.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMARKET V6 Partner API
|
|
3
|
+
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
|
+
*
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
|
+
* Contact: semo.io.kr@gmail.com
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
9
|
+
* https://openapi-generator.tech
|
|
10
|
+
* Do not edit the class manually.
|
|
11
|
+
*/
|
|
12
|
+
import type { Configuration } from '../configuration';
|
|
13
|
+
import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
|
|
14
|
+
import { type RequestArgs, BaseAPI } from '../base';
|
|
15
|
+
import type { CreateEmbedLaunch201Response } from '../models';
|
|
16
|
+
import type { EmbedLaunchRequestDto } from '../models';
|
|
17
|
+
/**
|
|
18
|
+
* EmbedApi - axios parameter creator
|
|
19
|
+
*/
|
|
20
|
+
export declare const EmbedApiAxiosParamCreator: (configuration?: Configuration) => {
|
|
21
|
+
/**
|
|
22
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
23
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
24
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
25
|
+
* @param {*} [options] Override http request option.
|
|
26
|
+
* @throws {RequiredError}
|
|
27
|
+
*/
|
|
28
|
+
createEmbedLaunch: (embedLaunchRequestDto: EmbedLaunchRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* EmbedApi - functional programming interface
|
|
32
|
+
*/
|
|
33
|
+
export declare const EmbedApiFp: (configuration?: Configuration) => {
|
|
34
|
+
/**
|
|
35
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
36
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
37
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
38
|
+
* @param {*} [options] Override http request option.
|
|
39
|
+
* @throws {RequiredError}
|
|
40
|
+
*/
|
|
41
|
+
createEmbedLaunch(embedLaunchRequestDto: EmbedLaunchRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateEmbedLaunch201Response>>;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* EmbedApi - factory interface
|
|
45
|
+
*/
|
|
46
|
+
export declare const EmbedApiFactory: (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) => {
|
|
47
|
+
/**
|
|
48
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
49
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
50
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
51
|
+
* @param {*} [options] Override http request option.
|
|
52
|
+
* @throws {RequiredError}
|
|
53
|
+
*/
|
|
54
|
+
createEmbedLaunch(embedLaunchRequestDto: EmbedLaunchRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateEmbedLaunch201Response>;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* EmbedApi - object-oriented interface
|
|
58
|
+
*/
|
|
59
|
+
export declare class EmbedApi extends BaseAPI {
|
|
60
|
+
/**
|
|
61
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
62
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
63
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
64
|
+
* @param {*} [options] Override http request option.
|
|
65
|
+
* @throws {RequiredError}
|
|
66
|
+
*/
|
|
67
|
+
createEmbedLaunch(embedLaunchRequestDto: EmbedLaunchRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateEmbedLaunch201Response, any, {}>>;
|
|
68
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* CMARKET V6 Partner API
|
|
5
|
+
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
6
|
+
*
|
|
7
|
+
* The version of the OpenAPI document: 37.1.1
|
|
8
|
+
* Contact: semo.io.kr@gmail.com
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
11
|
+
* https://openapi-generator.tech
|
|
12
|
+
* Do not edit the class manually.
|
|
13
|
+
*/
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
import globalAxios from 'axios';
|
|
24
|
+
// Some imports not used depending on template conditions
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
import { DUMMY_BASE_URL, assertParamExists, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
import { BASE_PATH, BaseAPI, operationServerMap } from '../base';
|
|
29
|
+
/**
|
|
30
|
+
* EmbedApi - axios parameter creator
|
|
31
|
+
*/
|
|
32
|
+
export const EmbedApiAxiosParamCreator = function (configuration) {
|
|
33
|
+
return {
|
|
34
|
+
/**
|
|
35
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
36
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
37
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
38
|
+
* @param {*} [options] Override http request option.
|
|
39
|
+
* @throws {RequiredError}
|
|
40
|
+
*/
|
|
41
|
+
createEmbedLaunch: (embedLaunchRequestDto_1, ...args_1) => __awaiter(this, [embedLaunchRequestDto_1, ...args_1], void 0, function* (embedLaunchRequestDto, options = {}) {
|
|
42
|
+
// verify required parameter 'embedLaunchRequestDto' is not null or undefined
|
|
43
|
+
assertParamExists('createEmbedLaunch', 'embedLaunchRequestDto', embedLaunchRequestDto);
|
|
44
|
+
const localVarPath = `/v2/embed/launch`;
|
|
45
|
+
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
|
46
|
+
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
|
47
|
+
let baseOptions;
|
|
48
|
+
if (configuration) {
|
|
49
|
+
baseOptions = configuration.baseOptions;
|
|
50
|
+
}
|
|
51
|
+
const localVarRequestOptions = Object.assign(Object.assign({ method: 'POST' }, baseOptions), options);
|
|
52
|
+
const localVarHeaderParameter = {};
|
|
53
|
+
const localVarQueryParameter = {};
|
|
54
|
+
// authentication partner-oauth2 required
|
|
55
|
+
// oauth required
|
|
56
|
+
yield setOAuthToObject(localVarHeaderParameter, "partner-oauth2", ["embed:launch"], configuration);
|
|
57
|
+
localVarHeaderParameter['Content-Type'] = 'application/json';
|
|
58
|
+
localVarHeaderParameter['Accept'] = 'application/json,application/problem+json';
|
|
59
|
+
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
|
60
|
+
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
61
|
+
localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers);
|
|
62
|
+
localVarRequestOptions.data = serializeDataIfNeeded(embedLaunchRequestDto, localVarRequestOptions, configuration);
|
|
63
|
+
return {
|
|
64
|
+
url: toPathString(localVarUrlObj),
|
|
65
|
+
options: localVarRequestOptions,
|
|
66
|
+
};
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* EmbedApi - functional programming interface
|
|
72
|
+
*/
|
|
73
|
+
export const EmbedApiFp = function (configuration) {
|
|
74
|
+
const localVarAxiosParamCreator = EmbedApiAxiosParamCreator(configuration);
|
|
75
|
+
return {
|
|
76
|
+
/**
|
|
77
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
78
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
79
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
80
|
+
* @param {*} [options] Override http request option.
|
|
81
|
+
* @throws {RequiredError}
|
|
82
|
+
*/
|
|
83
|
+
createEmbedLaunch(embedLaunchRequestDto, options) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
var _a, _b, _c;
|
|
86
|
+
const localVarAxiosArgs = yield localVarAxiosParamCreator.createEmbedLaunch(embedLaunchRequestDto, options);
|
|
87
|
+
const localVarOperationServerIndex = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.serverIndex) !== null && _a !== void 0 ? _a : 0;
|
|
88
|
+
const localVarOperationServerBasePath = (_c = (_b = operationServerMap['EmbedApi.createEmbedLaunch']) === null || _b === void 0 ? void 0 : _b[localVarOperationServerIndex]) === null || _c === void 0 ? void 0 : _c.url;
|
|
89
|
+
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* EmbedApi - factory interface
|
|
96
|
+
*/
|
|
97
|
+
export const EmbedApiFactory = function (configuration, basePath, axios) {
|
|
98
|
+
const localVarFp = EmbedApiFp(configuration);
|
|
99
|
+
return {
|
|
100
|
+
/**
|
|
101
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
102
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
103
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
104
|
+
* @param {*} [options] Override http request option.
|
|
105
|
+
* @throws {RequiredError}
|
|
106
|
+
*/
|
|
107
|
+
createEmbedLaunch(embedLaunchRequestDto, options) {
|
|
108
|
+
return localVarFp.createEmbedLaunch(embedLaunchRequestDto, options).then((request) => request(axios, basePath));
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* EmbedApi - object-oriented interface
|
|
114
|
+
*/
|
|
115
|
+
export class EmbedApi extends BaseAPI {
|
|
116
|
+
/**
|
|
117
|
+
* ์ค์ฝํ `embed:launch` ํ์. ๋ฐ์ฃผ๊ธฐ๊ด ๋ด๋น์(`memberId`)์ฉ ์ผํ์ฑ launch code(60์ด TTL)๋ฅผ ๋ฐ๊ธํฉ๋๋ค. ์ด code ๋ก CMARKET ํ๋ฉด์ด ERP ์์์ ๊ทธ๋๋ก ์ด๋ฆฝ๋๋ค โ REST ๋ก UI ๋ฅผ ๋ค์ ๋ง๋ค์ง ์๋ ์ฐ๋ ๋ฐฉ์์
๋๋ค. **ํ๋ฐํธ์์ ์ง์ ํธ์ถํ์ง ๋ง์ธ์.** ์ด API ๋ ํํธ๋ ์๊ฒฉ์ฆ๋ช
์ ์ฐ๋ฏ๋ก ERP **๋ฐฑ์๋**๊ฐ ํธ์ถํ๊ณ , ํ๋ฐํธ์๋ ์์ฒด ์๋ํฌ์ธํธ(์: `POST /api/embed/launch`)๋ก ๊ฐ์ธ ๋
ธ์ถํฉ๋๋ค. code ๋ URL ์ ์ฃ์ง ๋ง๊ณ `@cmarket/embed` SDK ์ postMessage ํธ๋์
ฐ์ดํฌ๋ก๋ง iframe ์ ์ ๋ฌํฉ๋๋ค(SDK ๊ฐ ๊ฐ์ ). `memberId` ๊ฐ ์ด API ํค์ ๋ํ ๋ฒ์ ๋ฐ์ด๋ฉด 403, ํ์ดํธ๋ฆฌ์คํธ ๋ฐ `screen`ยท`components` ๋ 400 ์
๋๋ค.
|
|
118
|
+
* @summary ์๋ฒ ๋ launch code ๋ฐ๊ธ (iframe SSO)
|
|
119
|
+
* @param {EmbedLaunchRequestDto} embedLaunchRequestDto
|
|
120
|
+
* @param {*} [options] Override http request option.
|
|
121
|
+
* @throws {RequiredError}
|
|
122
|
+
*/
|
|
123
|
+
createEmbedLaunch(embedLaunchRequestDto, options) {
|
|
124
|
+
return EmbedApiFp(this.configuration).createEmbedLaunch(embedLaunchRequestDto, options).then((request) => request(this.axios, this.basePath));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 37.
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 37.
|
|
7
|
+
* The version of the OpenAPI document: 37.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 37.
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -115,7 +115,7 @@ export declare const PartnerApiApiAxiosParamCreator: (configuration?: Configurat
|
|
|
115
115
|
*/
|
|
116
116
|
createExternalContractDocuments: (idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
|
|
117
117
|
/**
|
|
118
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
118
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
119
119
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
120
120
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
121
121
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -367,7 +367,7 @@ export declare const PartnerApiApiFp: (configuration?: Configuration) => {
|
|
|
367
367
|
*/
|
|
368
368
|
createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateExternalContractDocumentsResponseDto>>;
|
|
369
369
|
/**
|
|
370
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
370
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
371
371
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
372
372
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
373
373
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -619,7 +619,7 @@ export declare const PartnerApiApiFactory: (configuration?: Configuration, baseP
|
|
|
619
619
|
*/
|
|
620
620
|
createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): AxiosPromise<CreateExternalContractDocumentsResponseDto>;
|
|
621
621
|
/**
|
|
622
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
622
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
623
623
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
624
624
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
625
625
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -871,7 +871,7 @@ export declare class PartnerApiApi extends BaseAPI {
|
|
|
871
871
|
*/
|
|
872
872
|
createExternalContractDocuments(idempotencyKey: string, createExternalContractDocumentsRequestDto: CreateExternalContractDocumentsRequestDto, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<CreateExternalContractDocumentsResponseDto, any, {}>>;
|
|
873
873
|
/**
|
|
874
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
874
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
875
875
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
876
876
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
877
877
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 37.
|
|
7
|
+
* The version of the OpenAPI document: 37.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -283,7 +283,7 @@ export const PartnerApiApiAxiosParamCreator = function (configuration) {
|
|
|
283
283
|
};
|
|
284
284
|
}),
|
|
285
285
|
/**
|
|
286
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
286
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
287
287
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
288
288
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
289
289
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1208,7 +1208,7 @@ export const PartnerApiApiFp = function (configuration) {
|
|
|
1208
1208
|
});
|
|
1209
1209
|
},
|
|
1210
1210
|
/**
|
|
1211
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
1211
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
1212
1212
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1213
1213
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1214
1214
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1643,7 +1643,7 @@ export const PartnerApiApiFactory = function (configuration, basePath, axios) {
|
|
|
1643
1643
|
return localVarFp.createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(axios, basePath));
|
|
1644
1644
|
},
|
|
1645
1645
|
/**
|
|
1646
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
1646
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
1647
1647
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1648
1648
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1649
1649
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1950,7 +1950,7 @@ export class PartnerApiApi extends BaseAPI {
|
|
|
1950
1950
|
return PartnerApiApiFp(this.configuration).createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(this.axios, this.basePath));
|
|
1951
1951
|
}
|
|
1952
1952
|
/**
|
|
1953
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
1953
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 1ํ์ฉ ์๋ช
URL ์ ๋ฐ๊ธํฉ๋๋ค. 3๋จ๊ณ๋ก ์๋๋ค. 1. ์ด ํธ์ถ๋ก `fileKey` ์ `uploadUrl` ์ ๋ฐ์ต๋๋ค. 2. `uploadUrl` ์ ํ์ผ ๋ณธ๋ฌธ์ `PUT` ํฉ๋๋ค โ ์๋ต์ `contentType` ์ `Content-Type` ํค๋์ ๊ทธ๋๋ก ์ค์ผ์ธ์. ์ด ์์ฒญ์ c-market ์ ๊ฑฐ์น์ง ์์ต๋๋ค. 3. `POST /v2/files/{fileKey}/complete` ๋ก ํ์ ํฉ๋๋ค. **2๋จ๊ณ๋ ์ด ๋ช
์ธ์ ์คํผ๋ ์ด์
์ผ๋ก ๋์ค์ง ์์ต๋๋ค** โ ์์ฒญ์ด c-market ์ด ์๋๋ผ ์คํ ๋ฆฌ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ํํ๋ ์ด๊ฒ ์ ๋ถ์
๋๋ค. ```bash curl -X PUT \"$uploadUrl\" -H \"Content-Type: $contentType\" --upload-file ์๋ฐฉ์.pdf ``` ```ts await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: fileBuffer, }); ``` **`Authorization` ํค๋๋ฅผ ๋ถ์ด์ง ๋ง์ธ์.** ์๊ฒฉ์ฆ๋ช
์ด `uploadUrl` ์์ ์๋ช
์ผ๋ก ๋ค์ด ์์ด ๋ณ๋ ์ธ์ฆ์ด ํ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ด ์ฃผ์๋ **์ฃผ์ ์์ฒด๊ฐ ์๊ฒฉ์ฆ๋ช
**์ด๋ฏ๋ก ๋ก๊ทธ์ ๋จ๊ธฐ์ง ๋ง์ธ์. **2๋จ๊ณ์ ์คํจ ์๋ต์ problem+json ์ด ์๋๋๋ค.** ์คํ ๋ฆฌ์ง๊ฐ ์ง์ ๋ตํ๋ฏ๋ก ๋ณธ๋ฌธ ํ์์ด ๋ค๋ฆ
๋๋ค โ c-market ์๋ฌ ํ์์ ๋ฃ์ง ๋ง์ธ์. ๋ง๋ฃ(`400`)ยท์ค๋ณต ์
๋ก๋(`409`)๋ผ๋ฉด 1๋จ๊ณ๋ถํฐ ๋ค์ ํ์ธ์. **`POST /v2/files` ์ ์ธ์ ๊ฐ๋ฆฌ๋:** ์์ ์ฒจ๋ถ๋ `POST /v2/files` ํ ๋ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ด c-market ์ ํต๊ณผํ๋ฏ๋ก base64 ํฝ์ฐฝ(4/3)๊น์ง ์นํ ์๋ณธ 23MB ๋ถ๊ทผ์ด ์ฒ์ฅ์
๋๋ค. ์ด ๊ฒฝ๋ก๋ ๋ฐ์ดํธ๊ฐ ์ง๋๊ฐ์ง ์์ **100MB** ๊น์ง ์ฌ๋ผ๊ฐ๋๋ค. **`uploadUrl` ์ 1ํ์ฉ์
๋๋ค.** ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋งํ ์๊ณ `expiresIn` ์ด ๋ค ๋ง๋ฃ๋ฉ๋๋ค โ ์ ์ฅํด ๋๊ณ ์ฌ์ฌ์ฉํ์ง ๋ง์๊ณ , ๋ง๋ฃ๋๋ค๋ฉด ์ด ํธ์ถ๋ถํฐ ๋ค์ ํ์ธ์. **ํ์ ์ค์ฝํ:** `files:write` **๋ฉฑ๋ฑ์ฑ:** `Idempotency-Key` ํค๋ ํ์.
|
|
1954
1954
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1955
1955
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1956
1956
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 37.
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 37.
|
|
7
|
+
* The version of the OpenAPI document: 37.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 37.
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* CMARKET V6 Partner API
|
|
5
5
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
6
6
|
*
|
|
7
|
-
* The version of the OpenAPI document: 37.
|
|
7
|
+
* The version of the OpenAPI document: 37.1.1
|
|
8
8
|
* Contact: semo.io.kr@gmail.com
|
|
9
9
|
*
|
|
10
10
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
package/dist/esm/api.d.ts
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
* CMARKET V6 Partner API
|
|
3
3
|
* ์ธ๋ถ ERP ์ฐ๋์ฉ RESTful API. ## ์ธ์ฆ OAuth2 Bearer JWT (`client_credentials` ํ๋ก์ฐ). `/oauth/token` ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ `Authorization: Bearer <token>` ํค๋๋ก ์ค์ผ์ธ์. ## ๊ถํ โ ๋ ๊ฐ์ ๋
๋ฆฝ๋ ์ถ `403` ์ ๋ง๋ฌ๋ค๋ฉด ๋ ์ค ์ด๋ ์ถ์ ๊ฑธ๋ฆฐ ๊ฒ์ธ์ง ๋จผ์ ๊ตฌ๋ถํ์ธ์. - **์ค์ฝํ** = *๋ฌด์์ ํ ์ ์๋*. ํ ํฐ์ ๋ถ์ฌ๋ `bids:read`ยท`contracts:write` ๋ฑ์
๋๋ค. ๋ฏธ๋ณด์ ์ `โฆ/insufficient-scope`. - **๋ํ ๋ฒ์** = *๋๊ตฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋*. API ํค ์ค์ ์ด๋ฉฐ ์ค์ฝํ๋ก ํํ๋์ง ์์ต๋๋ค. ๋ฒ์ ๋ฐ์ด๋ฉด ์ค์ฝํ์ ๋ฌด๊ดํ๊ฒ 403 ์
๋๋ค. ๋ํ ๋ฒ์๋ ํค๋ง๋ค ๋ ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค โ **์์ ๊ทธ๋ฃน ์ ์**(๊ธฐ๊ด ํค. ์ฌ์
์ฒยท๋ถ์ ๊ณ์ ์ด ์๋ก ์๊ฒจ๋ ์๋ ํฌํจ) ๋๋ **์ง์ ๋ฐ์ฃผ์ฒ ๋ชฉ๋ก**(๊ณ์ฝ์ผ๋ก ํฉ์๋ ๋ชฉ๋ก). ๋ฒ์๋ฅผ ๋ํ์ผ ํ๋ฉด ์ค์ฝํ๊ฐ ์๋๋ผ ํค ์ค์ ๋ณ๊ฒฝ์ ์์ฒญํ์ธ์. ## ์ฑ๊ณต ์๋ต ๋ดํฌ `/v2` ์ ๋ชจ๋ 2xx ๋ณธ๋ฌธ์ `{ \"data\": โฆ }` ์
๋๋ค. ๋จ์ผ ๋ฆฌ์์ค๋ ๋ชฉ๋ก์ด๋ ๊ฐ์ต๋๋ค. ๋ชฉ๋ก์ฒ๋ผ ๋ถ๊ฐ ์ ๋ณด๊ฐ ์๋ ์๋ต์ `meta` ๊ฐ ํจ๊ป ์ค๋ฆฝ๋๋ค โ ์: `{ \"data\": [...], \"meta\": { \"nextCursor\": \"โฆ\" } }`. ๋ถ๊ฐ ์ ๋ณด๊ฐ ์์ผ๋ฉด `meta` ํค๋ ์์ ๋๊ฐ์ง ์์ต๋๋ค(๋น ๊ฐ์ฒด๋ฅผ ์ฃ์ง ์์ต๋๋ค). ๋ดํฌ๋ฅผ ์ฐ์ง ์๋ ํ๋ฉด์ ๋์
๋๋ค. `/oauth/_*` ์ `/.well-known/_*` ๋ ๊ฐ๊ฐ RFC 6749ยทRFC 8414ยทRFC 9728 ์ด ์ต์์ ํ๋๋ฅผ ๊ท์ ํ๊ณ , ํ์ผ ๋ด์ฉ ์๋ต์ ๋ณธ๋ฌธ์ด JSON ์ด ์๋๋๋ค. ์๋ฌ ์๋ต์๋ ๋ดํฌ๋ฅผ ์์ฐ์ง ์์ต๋๋ค โ ์๋ problem+json ์ด ๋จ๋
์ผ๋ก ์ฑ
์์ง๋๋ค. ## ์กฐ๊ฑด๋ถ ์์ฒญ (ETag) `/v2` ์ ๋ชจ๋ `GET` ์๋ต์ weak `ETag`(`W/\"โฆ\"`)๊ฐ ์ค๋ฆฝ๋๋ค. ๋ฐ์ ๊ฐ์ ๋ค์ ์์ฒญ์ `If-None-Match` ํค๋๋ก ๋๋ณด๋ด๋ฉด, ๋ด์ฉ์ด ๊ทธ๋๋ก์ผ ๋ `304 Not Modified` ๋ฅผ ๋ณธ๋ฌธ ์์ด ๋ฐ์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ฐ์ ์์์ ๋ฐ๋ณต ์กฐํํ๋ ์ฐ๋์ด๋ผ๋ฉด ์ด ํค๋ ํ๋๋ก ์ ์ก๋์ด ์ฌ๋ผ์ง๋๋ค. ## ์๋ฌ (RFC 9457 problem+json) ๋ชจ๋ ์๋ฌ ์๋ต์ `application/problem+json` ์
๋๋ค. **HTTP status + `type` URI** ๋ก ๋ถ๊ธฐํ์ธ์. - `retryable`(boolean): ์๋ ์ฌ์๋ ์์ ์ฌ๋ถ. `true`(429ยท5xx transient)๋ฉด backoff ํ ์ฌ์๋ํ๊ณ , `false`๋ฉด ์์ฒญ์ ๊ณ ์ณ์ผ ํฉ๋๋ค. - `traceId`: ์์ฒญ ์ถ์ id. `X-Correlation-Id` ์๋ต ํค๋์ ๊ฐ์ ๊ฐ์
๋๋ค โ ๋ฌธ์ํ ๋ ์ด ๊ฐ์ ์ฒจ๋ถํ์ธ์. - `correlationId`: `traceId` ์ ๊ฐ์ ๊ฐ์ ์ ์ด๋ฆ. ๊ธฐ์กด ์ฐ๋ ํธํ์ผ๋ก ํจ๊ป ์ค๋ฆฝ๋๋ค. ์ ์ฐ๋์ `traceId` ๋ฅผ ์ฝ์ผ์ธ์. - `invalid-params`: ๊ฒ์ฆ ์คํจ(400 `โฆ/validation-failed`) ์ ์๋ฐ ํ๋ ๊ฒฝ๋ก ๋ชฉ๋ก(RFC 9457 ํ์ฅ, ๊ฐ ์์). `type` ์ `https://problems.cmarket.io/partner/<slug>` ํํ์ **์์ ์๋ณ์**์
๋๋ค. RFC 9457 ยง3.1.1 ์ด ํ์ฉํ๋ ๋๋ก ์ด URI ๋ **์ญ์ฐธ์กฐ(dereference)๋์ง ์์ต๋๋ค** โ ๋ธ๋ผ์ฐ์ ๋ก ์ด์ง ๋ง๊ณ ๋ฌธ์์ด ๋น๊ต๋ก๋ง ์ฐ์ธ์. slug ๋ชฉ๋ก๊ณผ ์๋ฏธ๋ ๊ฐ ์๋ํฌ์ธํธ์ ์๋ต ์ค๋ช
์ status ๋ณ๋ก ์ ํ ์์ต๋๋ค. ### ๋ฉฑ๋ฑ์ฑ ์๋ฐ: 409 ์ 422 ์ ์ฐจ์ด - `409` `โฆ/idempotency-key-conflict` โ ๊ฐ์ ํค์ **์ ์์ฒญ์ด ์์ง ์ฒ๋ฆฌ ์ค**์
๋๋ค. ์ ์ ๋ค ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. - `422` `โฆ/idempotency-key-reused` โ ๊ฐ์ ํค๋ฅผ **๋ค๋ฅธ body** ๋ก ๋ณด๋์ต๋๋ค. ์ฌ์๋ํด๋ ์์ํ ๊ฐ์ ์คํจ์ด๋ ์ ํค๋ฅผ ์ฐ๊ฑฐ๋ body ๋ฅผ ๋๋๋ฆฌ์ธ์. ## Rate Limit ์ ์ญ **60 ์์ฒญ/๋ถ per `client_id`**, ํ ํฐ ๋ฐ๊ธ(`/oauth/token`)์ **5 ์์ฒญ/๋ถ** ์
๋๋ค. ์ด๊ณผ ์ `429`(`type: โฆ/too-many-requests`). ์ฟผํฐ๋ ๋ ๊ฐ์ง ํ๊ธฐ๋ก ํจ๊ป ๋๊ฐ๋๋ค โ ์ ๊ท ์ฐ๋์ ํ์ค ํ๋๋ฅผ ์ฐ์ธ์. - **ํ์ค**(`draft-ietf-httpapi-ratelimit-headers`, Structured Fields): `RateLimit-Policy: \"default\";q=60;w=60` (์ ์ฑ
) ยท `RateLimit: \"default\";r=59;t=42` (์๋ r, ๋ฆฌ์
๊น์ง t ์ด) - **๋ ๊ฑฐ์**(๊ด์ฉ): `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset`. ๊ธฐ์กด ์ฐ๋ ํธํ์ ์ํด ์ ์งํฉ๋๋ค. `429` ์์๋ `Retry-After`(์ด)๊ฐ ์ฐ์ ํฉ๋๋ค. ๋๋ ๋๊ธฐํ(ํ๋ชฉ ๋จ์ ๋ฐ๋ณต ๋ฑ๋ก ๋ฑ)๋ `Retry-After` ๋งํผ backoff ํ ์ฌ์๋ํ์ธ์. ## ์ถ์ ์์ฒญ์ `X-Correlation-Id` ํค๋๋ฅผ ์ค์ผ๋ฉด ๊ทธ๋๋ก echo ๋๊ณ , ์์ผ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธํฉ๋๋ค. ๋ชจ๋ ์๋ต(์ฑ๊ณต/์๋ฌ)์ `X-Correlation-Id` ๊ฐ ์ค๋ฆฝ๋๋ค. ## ์ ๋ฐฉํธํ โ ๋ชจ๋ฅด๋ ํ๋์ ๊ฐ์์ ๊นจ์ง์ง ์๊ฒ ๋ค์ ์
์ breaking ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ง ์์ผ๋ฉฐ minor ๋ฆด๋ฆฌ์ค์์ ์๊ณ ์์ด ์ผ์ด๋ฉ๋๋ค. ์ด ์ ์ ๋ก ๊ตฌํํ์ธ์. - **์ ํ ํ๋ ์ถ๊ฐ**: ๋ชจ๋ฅด๋ ํ๋๋ ๋ฌด์ํ์ธ์. ์๊ฒฉ ํ์(unknown key ๊ฑฐ๋ถ)๋ฅผ ์ฐ์ง ๋ง์ธ์. - **enum ๊ฐ ์ถ๊ฐ**: ์ํยท๋์ฐฐ๋ฐฉ๋ฒ ๋ฑ์ ์ ๊ฐ์ด ์๊น๋๋ค. ๋ชจ๋ฅด๋ ๊ฐ์ ๋ง๋๋ฉด ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ์๋ฌธ ๋ฌธ์์ด์ ๋ณด์กดํ์ธ์. - **problem `type` slug ์ถ๊ฐ**: ๋ชจ๋ฅด๋ slug ์ **HTTP status ๋ก ํด๋ฐฑ**ํด ๋ถ๊ธฐํ์ธ์. ## ๋ฒ์ ์๋ช
(deprecation/sunset) - **_/v2** breaking ๋ณ๊ฒฝ์ CHANGELOG SemVer(major bump)์ `Deprecation`/`Sunset` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
4
4
|
*
|
|
5
|
-
* The version of the OpenAPI document: 37.
|
|
5
|
+
* The version of the OpenAPI document: 37.1.1
|
|
6
6
|
* Contact: semo.io.kr@gmail.com
|
|
7
7
|
*
|
|
8
8
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
9
9
|
* https://openapi-generator.tech
|
|
10
10
|
* Do not edit the class manually.
|
|
11
11
|
*/
|
|
12
|
+
export * from './api/embed-api';
|
|
12
13
|
export * from './api/oauth-api';
|
|
13
14
|
export * from './api/partner-api-api';
|
|
14
15
|
export * from './api/products-api';
|