@cmarket/partner-sdk 37.1.1 โ 37.2.0
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 +4 -4
- package/api/embed-api.ts +1 -1
- 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 +1 -1
- package/base.ts +1 -1
- package/common.ts +1 -1
- package/configuration.ts +1 -1
- package/dist/api/embed-api.d.ts +1 -1
- package/dist/api/embed-api.js +1 -1
- 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 +1 -1
- package/dist/api.js +1 -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 +1 -1
- package/dist/esm/api/embed-api.js +1 -1
- 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 +1 -1
- package/dist/esm/api.js +1 -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 +1 -1
- package/dist/esm/models/create-embed-launch201-response.js +1 -1
- 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 +1 -1
- package/dist/esm/models/embed-launch-request-dto.js +1 -1
- package/dist/esm/models/embed-launch-response-dto.d.ts +1 -1
- package/dist/esm/models/embed-launch-response-dto.js +1 -1
- 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/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 +1 -1
- package/dist/models/create-embed-launch201-response.js +1 -1
- 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 +1 -1
- package/dist/models/embed-launch-request-dto.js +1 -1
- package/dist/models/embed-launch-response-dto.d.ts +1 -1
- package/dist/models/embed-launch-response-dto.js +1 -1
- 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/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/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 +1 -1
- 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 +1 -1
- package/models/embed-launch-response-dto.ts +1 -1
- 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/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/README.md
CHANGED
|
@@ -13,7 +13,7 @@ CMARKET V6 Partner API ์ ๊ณต์ ํด๋ผ์ด์ธํธ SDK โ ์ธ๋ถ ERP ๊ฐ ์
์ฐฐ
|
|
|
13
13
|
TypeScript / Node (npm):
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm install @cmarket/partner-sdk@37.
|
|
16
|
+
npm install @cmarket/partner-sdk@37.2.0
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Java (Maven):
|
|
@@ -22,7 +22,7 @@ Java (Maven):
|
|
|
22
22
|
<dependency>
|
|
23
23
|
<groupId>net.c-market</groupId>
|
|
24
24
|
<artifactId>partner-sdk</artifactId>
|
|
25
|
-
<version>37.
|
|
25
|
+
<version>37.2.0</version>
|
|
26
26
|
</dependency>
|
|
27
27
|
```
|
|
28
28
|
|
|
@@ -375,7 +375,7 @@ CMARKET ์ด์ํ์ ๋ฑ๋กํด์ผ ํฉ๋๋ค(๋ฏธ๋ฑ๋ก origin ์ iframe ๋ก๋
|
|
|
375
375
|
|
|
376
376
|
---
|
|
377
377
|
|
|
378
|
-
## @cmarket/partner-sdk@37.
|
|
378
|
+
## @cmarket/partner-sdk@37.2.0
|
|
379
379
|
|
|
380
380
|
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
|
|
381
381
|
|
|
@@ -413,7 +413,7 @@ navigate to the folder of your consuming project and run one of the following co
|
|
|
413
413
|
_published:_
|
|
414
414
|
|
|
415
415
|
```
|
|
416
|
-
npm install @cmarket/partner-sdk@37.
|
|
416
|
+
npm install @cmarket/partner-sdk@37.2.0 --save
|
|
417
417
|
```
|
|
418
418
|
|
|
419
419
|
_unPublished (not recommended):_
|
package/api/embed-api.ts
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.2.0
|
|
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/api/oauth-api.ts
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.2.0
|
|
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/api/partner-api-api.ts
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.2.0
|
|
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).
|
|
@@ -392,7 +392,7 @@ export const PartnerApiApiAxiosParamCreator = function (configuration?: Configur
|
|
|
392
392
|
};
|
|
393
393
|
},
|
|
394
394
|
/**
|
|
395
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
395
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
396
396
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
397
397
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
398
398
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1412,7 +1412,7 @@ export const PartnerApiApiFp = function(configuration?: Configuration) {
|
|
|
1412
1412
|
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
|
|
1413
1413
|
},
|
|
1414
1414
|
/**
|
|
1415
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
1415
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
1416
1416
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1417
1417
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1418
1418
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1785,7 +1785,7 @@ export const PartnerApiApiFactory = function (configuration?: Configuration, bas
|
|
|
1785
1785
|
return localVarFp.createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(axios, basePath));
|
|
1786
1786
|
},
|
|
1787
1787
|
/**
|
|
1788
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
1788
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
1789
1789
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1790
1790
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1791
1791
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -2099,7 +2099,7 @@ export class PartnerApiApi extends BaseAPI {
|
|
|
2099
2099
|
}
|
|
2100
2100
|
|
|
2101
2101
|
/**
|
|
2102
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
2102
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
2103
2103
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
2104
2104
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
2105
2105
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
package/api/products-api.ts
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.2.0
|
|
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/api/well-known-api.ts
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.2.0
|
|
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/api.ts
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.2.0
|
|
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/base.ts
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.2.0
|
|
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/common.ts
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.2.0
|
|
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/configuration.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* CMARKET V6 Partner API
|
|
4
4
|
* ์ธ๋ถ 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` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
5
5
|
*
|
|
6
|
-
* The version of the OpenAPI document: 37.
|
|
6
|
+
* The version of the OpenAPI document: 37.2.0
|
|
7
7
|
* Contact: semo.io.kr@gmail.com
|
|
8
8
|
*
|
|
9
9
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
package/dist/api/embed-api.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.2.0
|
|
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/api/embed-api.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* ์ธ๋ถ 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` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 37.
|
|
8
|
+
* The version of the OpenAPI document: 37.2.0
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
package/dist/api/oauth-api.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.2.0
|
|
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/api/oauth-api.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* ์ธ๋ถ 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` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 37.
|
|
8
|
+
* The version of the OpenAPI document: 37.2.0
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* 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.2.0
|
|
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` ๋ก ํ์ ํฉ๋๋ค. **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:
|
|
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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ๋ก ํ์ ํฉ๋๋ค. **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:
|
|
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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ๋ก ํ์ ํฉ๋๋ค. **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:
|
|
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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ๋ก ํ์ ํฉ๋๋ค. **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:
|
|
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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* CMARKET V6 Partner API
|
|
6
6
|
* ์ธ๋ถ 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` ํค๋๋ก ํต์งํฉ๋๋ค. ์ด ํค๋๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
|
|
7
7
|
*
|
|
8
|
-
* The version of the OpenAPI document: 37.
|
|
8
|
+
* The version of the OpenAPI document: 37.2.0
|
|
9
9
|
* Contact: semo.io.kr@gmail.com
|
|
10
10
|
*
|
|
11
11
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
@@ -286,7 +286,7 @@ const PartnerApiApiAxiosParamCreator = function (configuration) {
|
|
|
286
286
|
};
|
|
287
287
|
}),
|
|
288
288
|
/**
|
|
289
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
289
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
290
290
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
291
291
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
292
292
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1212,7 +1212,7 @@ const PartnerApiApiFp = function (configuration) {
|
|
|
1212
1212
|
});
|
|
1213
1213
|
},
|
|
1214
1214
|
/**
|
|
1215
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
1215
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
1216
1216
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1217
1217
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1218
1218
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1648,7 +1648,7 @@ const PartnerApiApiFactory = function (configuration, basePath, axios) {
|
|
|
1648
1648
|
return localVarFp.createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(axios, basePath));
|
|
1649
1649
|
},
|
|
1650
1650
|
/**
|
|
1651
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
1651
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
1652
1652
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1653
1653
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1654
1654
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|
|
@@ -1956,7 +1956,7 @@ class PartnerApiApi extends base_1.BaseAPI {
|
|
|
1956
1956
|
return (0, exports.PartnerApiApiFp)(this.configuration).createExternalContractDocuments(idempotencyKey, createExternalContractDocumentsRequestDto, options).then((request) => request(this.axios, this.basePath));
|
|
1957
1957
|
}
|
|
1958
1958
|
/**
|
|
1959
|
-
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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:
|
|
1959
|
+
* ํ์ผ ๋ณธ๋ฌธ์ ์คํ ๋ฆฌ์ง๋ก **์ง์ ** ์ฌ๋ฆฌ๊ธฐ ์ํ 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 import { readFile } from \'node:fs/promises\'; // ๋ณธ๋ฌธ์ **ํ์ผ ๋ฐ์ดํธ ๊ทธ๋๋ก**์
๋๋ค โ JSON ๋ multipart ๋ ์๋๋๋ค. await fetch(uploadUrl, { method: \'PUT\', headers: { \'Content-Type\': contentType }, body: await readFile(\'์๋ฐฉ์.pdf\'), }); ``` **`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` ํค๋ ํ์.
|
|
1960
1960
|
* @summary ์ฒจ๋ถํ์ผ ์
๋ก๋ ์ฃผ์ ๋ฐ๊ธ (๋์ฉ๋ยท๊ถ์ฅ)
|
|
1961
1961
|
* @param {string} idempotencyKey ๋ฉฑ๋ฑ์ฑ ํค(1~255์, `[A-Za-z0-9_-]`). **์ฌ์๋ํ ๋ ์ฒ์๊ณผ ๊ฐ์ ํค๋ฅผ ๋ค์ ๋ณด๋ด์ผ** ์ค๋ณต ์์ฑ์ด ๋งํ๋๋ค โ ํ์์์ยท๋คํธ์ํฌ ์ค๋ฅ๋ก ๋ค์ ๋ถ๋ฅด๋ฉด์ ์ ํค๋ฅผ ๋ง๋ค๋ฉด ๋ณ๊ฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋์ ํค๋ UUID v4 ๋ฅผ ๋ง๋ค์ด **์ฐ๋ ์์คํ
์์ฅ์ ์ ์ฅ**ํ๊ฑฐ๋, ์์ฒญ ๋ด์ฉ์์ ๊ฒฐ์ ์ ์ผ๋ก ํ์(์: `bid-create-{๊ตฌ๋งค๋ฒํธ}`)ํด ์ฌ์๋๊ฐ ๊ฐ์ ๊ฐ์ ์ฌํํ๋๋ก ํ์ธ์. ๊ฐ์ ํค + ๊ฐ์ body ๋ 24์๊ฐ ๋์ ์บ์๋ ์๋ต์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค.
|
|
1962
1962
|
* @param {CreateUploadUrlRequestDto} createUploadUrlRequestDto
|