SW Engineering•2026.06.25

function canCancelOrder(order: Order) { return ['PENDING', 'PAID'].includes(order.status)}POST /orders/:id/cancel 요청을 거부해야 하며, 프론트엔드는 관련 버튼을 비활성화하거나 숨겨야 합니다.// APIfunction handleCancelOrder(ctx: Context, payload: Payload) { const order = ctx.orderRepository.get(payload.id) if (!canCancelOrder(order)) { throw new Error(`Cannot cancel an order in state: ${order.status}`) } // 기타 로직}// 프론트엔드function CancelButton({ status }: { status: OrderStatus }) { const disabled = !['PENDING', 'PAID'].includes(status); return ( <button disabled={disabled} name="action" value="cancel" > Cancel order </button> )}normalizePostcode()와 같이 컨텍스트에 의존하지 않는 정적 헬퍼를 공유하는 것은 괜찮습니다.{ "id": "123", "customer": { "name": "Jay" }, "items": [{ "name": "Product one" }], "status": "PENDING", "allowedActions": ["CANCEL"]}function CancelButton({ allowedActions }: { allowedActions: Action[] }) { const disabled = !allowedActions.includes('CANCEL'); return ( <button disabled={disabled} name="action" value="cancel" > Cancel order </button> )}{ "status": "SHIPPED", "allowedActions": [], "disabledReasons": { "CANCEL": "Orders can't be canceled once shipped" }}GitHub GraphQL API의 viewerCanUpdate 필드는 정확히 동일하게 동작합니다.
{ "class": ["order"], "properties": { "id": "123", "status": "PENDING" }, "actions": [ { "name": "cancel-order", "title": "Cancel order", "method": "POST", "href": "https://api.example.com/orders/123/cancel" } ]}import { packRules } from '@casl/ability/extra';import { defineRulesFor } from '../services/appAbility';app.post('/authz', (req, res) => { res.send({ rules: packRules(defineRulesFor(req.user)) });});{ "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" }, "billing_address": { "type": "string" } }, "required": ["name"], "dependentRequired": { "credit_card": ["billing_address"] }}zod 스키마는 코드이므로(직렬화를 지원하려는 여러 시도가 있긴 하지만), 이를 공유한다는 것은 공유 모듈을 사용하거나 변환 단계를 거쳐야 함을 의미합니다.아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!

과소평가된 리팩터링이 메모리 사용량을 90% 절감한 방법
Inkyu Oh • 라이브러리, 프레임워크
TSRX | 선언적 UI를 위한 TypeScript 언어 확장
Inkyu Oh • 라이브러리, 프레임워크