GraphQL OneOf 입력

GraphQL OneOf Input

@oneOf 입력 객체는 여러 선택지 중 정확히 하나의 null이 아닌 값만 받습니다.

···
html
<div class="viz"><h3>input FindUser @oneOf</h3><div class="row"><div class="box code" id="payload">{ id: 42 }</div><span class="arrow">→</span><div class="box" id="verdict">VALID</div></div><div class="muted" id="reason">exactly one non-null field</div></div>
css
.viz{width:94%;height:88%;max-width:960px;padding:clamp(10px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,1.35vw,16px)/1.35 var(--font-sans,system-ui,sans-serif);display:flex;flex-direction:column;gap:clamp(7px,1.8vmin,13px);overflow:hidden}.viz h3{margin:0;color:var(--accent);font:700 clamp(12px,1.35vw,16px)/1.2 var(--font-sans,system-ui,sans-serif);letter-spacing:.04em}.viz .row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.viz .box{padding:clamp(5px,1.5vmin,12px);border:1px solid var(--line);border-radius:9px;background:var(--bg);text-align:center}.viz .muted{color:var(--muted)}.viz .accent{color:var(--accent)}.viz .code{font-family:ui-monospace,monospace}.viz .pill{padding:3px 7px;border:1px solid var(--line);border-radius:99px;white-space:nowrap}.viz .active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.viz .arrow{color:var(--accent);font:700 18px ui-monospace,monospace}#payload{min-width:51%}#verdict{min-width:20%;border-color:var(--accent)}#verdict.invalid{color:var(--accent-3);border-color:var(--accent-3)}
js
const cases=[['{ id: 42 }','VALID','exactly one non-null field'],['{ id: 42, username: "ada" }','ERROR','two fields supplied'],['{ username: "ada" }','VALID','exactly one non-null field']];let i=0;function draw(){const c=cases[i];document.getElementById('payload').textContent=c[0];const v=document.getElementById('verdict');v.textContent=c[1];v.classList.toggle('invalid',c[1]==='ERROR');document.getElementById('reason').textContent=c[2];i=(i+1)%cases.length}draw();setInterval(draw,1500)

GraphQL의 OneOf 입력 객체는 여러 대안 중 하나만 선택해야 하는 입력을 스키마에 표현합니다. 예를 들어 사용자를 ID 또는 사용자명으로 찾을 때 둘을 동시에 보내거나 둘 다 빼면 오류입니다. 선택된 필드 값도 null일 수 없습니다.

데모는 id만 지정하면 통과하고 id·username을 함께 보내면 막히는 입력 게이트를 보여줍니다. @oneOf 필드는 nullable 타입으로 정의하되 실제 입력에서는 정확히 하나의 값을 제공해야 합니다.

언제 쓰나

검색·조회 조건처럼 서로 배타적인 입력 대안을 한 인자로 받아야 할 때 씁니다.

페이지로 열기 ↗