↩ SERVIT

Wir sind spezialisiert auf die Programmiersprachen PHP (Web) und .net C# (Windows Applikationen).

REST API Tester

Published: Oktober 2, 2025 Updated: Juni 4, 2026 View original page
Praktische Online-Tools für Entwickler: JSON & XML formatiert anzeigen, REST-APIs testen, Daten prüfen und alles direkt im Browser nutzen – ohne Speicherung.

REST API Tester

Kostenloser REST-Tester: HTTP-Requests mit Headern, Auth & Body senden. Response als JSON/XML/HTML/Plain ansehen, cURL generieren, History. 100 % lokal.
/* ===== REST Tester – Light Theme (servit.dev) ===== */ .sd-restman{ --r-primary: #008fbf; --r-fg: #0f172a; --r-bg: transparent; --r-muted: #4b5563; --r-border: #e5e7eb; --r-surface: #ffffff; --r-surface2: #f0f2f7; --r-code: #1e293b; --r-code-border: #e5e7eb; --r-radius: 12px; font-family: inherit; color: var(--r-fg); background: var(--r-bg); border: none; border-radius: 0; padding: 0; width: 100%; max-width: 100%; margin: 0; box-shadow: none; } /* Top bar: Method + URL + Send */ .sd-restman .sd-r__top{display:grid;grid-template-columns:120px 1fr auto;gap:10px;margin-bottom:14px} /* Selects & Inputs */ .sd-restman select.sd-r__select, .sd-restman input.sd-r__input{ border:1px solid var(--r-border) !important;background:var(--r-surface) !important;color:var(--r-fg) !important; border-radius:8px;padding:8px 12px;font-size:13px;line-height:1.4; height:auto;min-height:0;box-shadow:none !important; appearance:auto;-webkit-appearance:auto;outline:none; transition:border-color .2s ease; } .sd-restman select.sd-r__select:focus, .sd-restman input.sd-r__input:focus{border-color:var(--r-primary) !important} .sd-restman .sd-r__url{width:100%} .sd-restman .sd-r__small{max-width:220px} /* Buttons */ .sd-restman button.sd-r__btn{ padding:7px 16px;border:1px solid var(--r-border) !important;border-radius:8px; background:var(--r-surface) !important;color:var(--r-fg) !important;cursor:pointer; font-size:13px;font-weight:500;line-height:1.4; box-shadow:none !important;text-transform:none;letter-spacing:0; transition:all .15s ease; } .sd-restman button.sd-r__btn:hover{ border-color:var(--r-primary) !important; color:var(--r-primary) !important; background:rgba(0,143,191,.04) !important; } .sd-restman button.sd-r__btn:active{transform:translateY(1px)} .sd-restman button.sd-r__btn.sd-r__btn--primary{ background:var(--r-primary) !important; border-color:var(--r-primary) !important; color:#ffffff !important; } .sd-restman button.sd-r__btn.sd-r__btn--primary:hover{ background:#2fbfef !important; border-color:#2fbfef !important; color:#ffffff !important; } /* Layout helpers */ .sd-restman .sd-r__row{display:flex;gap:10px;align-items:center;margin:10px 12px} .sd-restman .sd-r__spacer{flex:1} .sd-restman .sd-r__label{font-size:13px;color:var(--r-muted);display:flex;align-items:center;gap:6px} /* Details blocks */ .sd-restman .sd-r__block{margin:12px 0;border:1px solid var(--r-border);border-radius:var(--r-radius);background:var(--r-surface)} .sd-restman .sd-r__subblock{margin-top:10px} .sd-restman .sd-r__sum{padding:10px 12px;color:var(--r-muted);cursor:pointer;user-select:none;font-size:13px;font-weight:600} /* Header editor */ .sd-restman .sd-r__headers{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;padding:0 12px 12px 12px} .sd-restman input.sd-r__hkey, .sd-restman input.sd-r__hval{ border:1px solid var(--r-border) !important;background:var(--r-surface2) !important;color:var(--r-fg) !important; border-radius:6px;padding:7px 10px;font-size:13px;box-shadow:none !important; } .sd-restman button.sd-r__hdel{ border:1px solid var(--r-border) !important;background:transparent !important;color:var(--r-muted) !important; border-radius:6px;padding:7px 10px;cursor:pointer;font-size:13px;box-shadow:none !important; } .sd-restman button.sd-r__hdel:hover{color:var(--r-primary) !important;border-color:var(--r-primary) !important} /* Body textarea */ .sd-restman textarea.sd-r__textarea{ width:calc(100% - 24px);min-height:180px;margin:0 12px 12px 12px; border:1px solid var(--r-border) !important;background:var(--r-surface2) !important;color:var(--r-fg) !important; border-radius:var(--r-radius);padding:12px; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:13px;line-height:1.6;box-shadow:none !important; transition:border-color .2s ease; } .sd-restman textarea.sd-r__textarea:focus{border-color:var(--r-primary) !important;outline:none} /* Tabs */ .sd-restman .sd-r__tabs{display:flex;gap:8px;align-items:center;padding:10px 12px;border-top:1px solid var(--r-border)} .sd-restman button.sd-r__tab{ border:1px solid var(--r-border) !important;background:var(--r-surface) !important;color:var(--r-fg) !important; border-radius:8px;padding:7px 14px;cursor:pointer;font-size:13px;font-weight:500; box-shadow:none !important;transition:all .15s ease; } .sd-restman button.sd-r__tab:hover{border-color:var(--r-primary) !important;color:var(--r-primary) !important} .sd-restman button.sd-r__tab.sd-is-active{ background:var(--r-primary) !important;border-color:var(--r-primary) !important;color:#ffffff !important; } /* Code output */ .sd-restman .sd-r__code{ display:none;margin:12px;border:1px solid var(--r-code-border);border-radius:var(--r-radius); padding:14px;background:var(--r-surface2);color:var(--r-code);overflow:auto;white-space:pre-wrap; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:1.6; } .sd-restman .sd-r__frame{ display:none;margin:12px;border:1px solid var(--r-code-border);border-radius:var(--r-radius); background:white;height:260px;width:calc(100% - 24px); } .sd-restman .sd-r__code.sd-is-active, .sd-restman .sd-r__frame.sd-is-active{display:block} /* Meta bar */ .sd-restman .sd-r__meta{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:6px 0 14px 0} .sd-restman .sd-r__meta > div{background:var(--r-surface);border:1px solid var(--r-border);border-radius:var(--r-radius);padding:10px 12px} .sd-restman .sd-r__meta small{display:block;color:var(--r-muted);font-size:11px;margin-bottom:2px} .sd-restman .sd-r__meta strong{font-size:14px;color:var(--r-fg)} /* History */ .sd-restman .sd-r__history{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;padding:0 12px 12px 12px} .sd-restman .sd-r__hist{border:1px solid var(--r-border);border-radius:var(--r-radius);background:var(--r-surface2);padding:12px} .sd-restman .sd-r__hist h4{margin:0 0 6px 0;font-size:13px;font-weight:600;color:var(--r-fg)} .sd-restman .sd-r__hist small{color:var(--r-muted);font-size:12px} .sd-restman .sd-r__hist .sd-r__btn{margin-top:8px} /* Privacy note */ .sd-restman .sd-r__privacy{color:var(--r-muted);font-size:13px;margin:14px 0 0} /* Syntax colors – light theme */ .sd-restman .tok-key{color:#0369a1} .sd-restman .tok-str{color:#047857} .sd-restman .tok-num{color:#b45309} .sd-restman .tok-bool{color:#9333ea} .sd-restman .tok-null{color:#6366f1} /* Mobile */ @media (max-width: 800px){ .sd-restman .sd-r__top{grid-template-columns:1fr 1fr auto} .sd-restman .sd-r__meta{grid-template-columns:repeat(2,1fr)} .sd-restman button.sd-r__btn{padding:7px 12px} }
GETPOSTPUT PATCHDELETEHEADOPTIONS
Status
Zeit
Size
Type
Headers
Body
raw
Proxy & History
Response

        

        
        

        


        
Response-Headers

        

Datenschutz: Alles bleibt im Browser. Es wird nichts gespeichert/übertragen – außer deinem Request zur Ziel-API (oder optional über deinen eigenen Proxy).

(function(){ function qs(sel,root){return(root||document).querySelector(sel)} var root=document.getElementById('sd-restman');if(!root)return; var els={ method:qs('#sdr-method',root),url:qs('#sdr-url',root),send:qs('#sdr-send',root), headers:qs('#sdr-headers',root),addHeader:qs('#sdr-add-header',root), auth:qs('#sdr-auth',root),authV1:qs('#sdr-auth-v1',root),authV2:qs('#sdr-auth-v2',root), bodyType:qs('#sdr-body-type',root),ctJson:qs('#sdr-ct-json',root),body:qs('#sdr-body',root), status:qs('#sdr-status',root),time:qs('#sdr-time',root),size:qs('#sdr-size',root),ctype:qs('#sdr-ctype',root), tabs:root.querySelectorAll('.sd-r__tab'), outJSON:qs('#sdr-out-json',root),outXML:qs('#sdr-out-xml',root),outHTML:qs('#sdr-out-html',root), outPlain:qs('#sdr-out-plain',root),outCurl:qs('#sdr-out-curl',root), respHeaders:qs('#sdr-resp-headers',root), copy:qs('#sdr-copy',root),download:qs('#sdr-download',root), useProxy:qs('#sdr-use-proxy',root),proxyUrl:qs('#sdr-proxy-url',root), clearHistory:qs('#sdr-clear-history',root),history:qs('#sdr-history',root) }; function addHeaderRow(name,value){ var wrap=document.createElement('div');wrap.className='sd-r__headers-row';wrap.style.display='contents'; var key=document.createElement('input');key.className='sd-r__hkey';key.placeholder='Header-Name';key.value=name||''; var val=document.createElement('input');val.className='sd-r__hval';val.placeholder='Header-Wert';val.value=value||''; var del=document.createElement('button');del.className='sd-r__hdel';del.type='button';del.textContent='Entfernen'; del.addEventListener('click',function(){wrap.remove()}); wrap.appendChild(key);wrap.appendChild(val);wrap.appendChild(del); els.headers.appendChild(wrap); } addHeaderRow('Accept','*/*'); els.addHeader.addEventListener('click',function(){addHeaderRow()}); els.auth.addEventListener('change',function(){ var m=els.auth.value; els.authV2.style.display=(m==='basic')?'':'none'; els.authV1.placeholder=(m==='bearer'?'Bearer Token':(m==='basic'?'Benutzer':'Token / Benutzer')); }); els.tabs.forEach(function(btn){ btn.addEventListener('click',function(){ els.tabs.forEach(function(b){b.classList.remove('sd-is-active')}); btn.classList.add('sd-is-active'); var t=btn.dataset.tab; [els.outJSON,els.outXML,els.outHTML,els.outPlain,els.outCurl].forEach(function(v){v.classList.remove('sd-is-active')}); ({json:els.outJSON,xml:els.outXML,html:els.outHTML,plain:els.outPlain,curl:els.outCurl}[t]).classList.add('sd-is-active'); }); }); function buildHeaders(){ var h={}; root.querySelectorAll('.sd-r__hkey').forEach(function(k,i){ var key=k.value.trim();var val=root.querySelectorAll('.sd-r__hval')[i].value; if(key)h[key]=val; }); if(els.auth.value==='bearer'&&els.authV1.value)h['Authorization']='Bearer '+els.authV1.value.trim(); if(els.auth.value==='basic'&&els.authV1.value){ var u=els.authV1.value||'',p=els.authV2.value||''; h['Authorization']='Basic '+btoa(u+':'+p); } if(els.ctJson.checked)h['Content-Type']='application/json'; return h; } function prettyJSON(s){try{return JSON.stringify(JSON.parse(s),null,2)}catch(_){return s}} function prettyXML(s){ try{ var p=new DOMParser(),d=p.parseFromString(s,'application/xml'); if(d.getElementsByTagName('parsererror').length)return s; var xml=new XMLSerializer().serializeToString(d),out='',pad=0; xml.split(/>\s*</).forEach(function(n){ if(n.match(/^\/\w/))pad--; out+=' '.repeat(Math.max(pad,0))+'\n'; if(n.match(/^]*[^\/]$/))pad++; }); return out.trim(); }catch(_){return s} } function hlJSON(s){ var esc=s.replace(/&/g,'&').replace(/</g,'<'); return esc .replace(/("(\\.|[^"\\])*")(\s*:)?/g,function(m,str,_e,colon){ return colon ?''+str+':' :''+str+''; }) .replace(/\b(true|false)\b/g,'$1') .replace(/\b(null)\b/g,'$1') .replace(/-?\b\d+(\.\d+)?([eE][+-]?\d+)?\b/g,'$&'); } function hlXML(s){ var esc=s.replace(/&/g,'&').replace(//g,'>'); esc=esc.replace(/<!--([\s\S]*?)-->/g,'<!--$1-->'); esc=esc.replace(/<(\/?)([a-zA-Z_:][\w:.-]*)([^&]*?)(\s*\/?)>/g,function(m,slash,tag,rest,close){ var attrs=rest.replace(/([a-zA-Z_:][\w:.-]*)(\s*=\s*)(".*?"|'.*?')/g, ' $1$2$3'); return'<'+slash+''+tag+''+attrs+close+'>'; }); return esc; } function makeCurl(url,method,headers,body){ var lines=['curl -i','-X '+method,"'"+url.replace(/'/g,"'\\''")+"'"]; Object.keys(headers).forEach(function(k){ lines.splice(1,0,"-H '"+k+": "+String(headers[k]).replace(/'/g,"'\\''")+"'"); }); if(body!=null&&body!==''){ lines.splice(1,0,"--data '"+String(body).replace(/'/g,"'\\''")+"'"); } return lines.join(' \\\n '); } var HKEY='sd-restman-history'; function loadHistory(){ var arr=JSON.parse(localStorage.getItem(HKEY)||'[]'); els.history.innerHTML=''; arr.forEach(function(it,idx){ var card=document.createElement('div');card.className='sd-r__hist'; var h4=document.createElement('h4');h4.textContent=it.method+' '+it.url; var sm=document.createElement('small'); sm.textContent=Object.keys(it.headers||{}).length+' Header \u00b7 '+(it.body?(it.body.length+' B Body'):'kein Body'); card.appendChild(h4);card.appendChild(sm);card.appendChild(document.createElement('br')); var btnL=document.createElement('button');btnL.className='sd-r__btn';btnL.textContent='Laden'; var btnD=document.createElement('button');btnD.className='sd-r__btn';btnD.textContent='L\u00f6schen'; btnL.addEventListener('click',function(){applyRequest(it)}); btnD.addEventListener('click',function(){arr.splice(idx,1);localStorage.setItem(HKEY,JSON.stringify(arr));loadHistory()}); card.appendChild(btnL);card.appendChild(btnD); els.history.appendChild(card); }); } function saveHistory(item){ var arr=JSON.parse(localStorage.getItem(HKEY)||'[]'); arr.unshift(item); var seen={},filtered=[]; arr.forEach(function(x){ var key=x.method+' '+x.url; if(seen[key])return;seen[key]=true;filtered.push(x); }); localStorage.setItem(HKEY,JSON.stringify(filtered.slice(0,20))); loadHistory(); } function applyRequest(it){ els.method.value=it.method;els.url.value=it.url; els.ctJson.checked=!!it.ctJson; els.body.value=it.body||''; els.headers.innerHTML=''; var entries=it.headers||{}; Object.keys(entries).forEach(function(k){addHeaderRow(k,entries[k])}); } els.clearHistory.addEventListener('click',function(){localStorage.removeItem(HKEY);loadHistory()}); loadHistory(); function switchTab(id){ root.querySelectorAll('.sd-r__tab').forEach(function(b){b.classList.remove('sd-is-active')}); root.querySelector('.sd-r__tab[data-tab="'+id+'"]').classList.add('sd-is-active'); [els.outJSON,els.outXML,els.outHTML,els.outPlain,els.outCurl].forEach(function(v){v.classList.remove('sd-is-active')}); ({json:els.outJSON,xml:els.outXML,html:els.outHTML,plain:els.outPlain,curl:els.outCurl}[id]).classList.add('sd-is-active'); } function send(){ [els.outJSON,els.outXML,els.outHTML,els.outPlain,els.outCurl,els.respHeaders].forEach(function(e){e.textContent=''}); els.status.textContent='\u2013';els.time.textContent='\u2013';els.size.textContent='\u2013';els.ctype.textContent='\u2013'; var url=els.url.value.trim();if(!url){els.status.textContent='URL fehlt';return} var method=els.method.value; var headers=buildHeaders(); var body;if(method!=='GET'&&method!=='HEAD'){body=els.body.value} var useProxy=els.useProxy.checked; var proxyUrl=(els.proxyUrl.value||'').trim()||'/api/cors-proxy.php'; var init={method:method,headers:headers}; if(body!==undefined&&body!=='')init.body=body; var t0=performance.now(); var fetchPromise; if(useProxy){ var payload={url:url,method:method,headers:headers,body:body}; fetchPromise=fetch(proxyUrl,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); }else{ fetchPromise=fetch(url,init); } fetchPromise.then(function(res){ var t1=performance.now(); els.time.textContent=(t1-t0).toFixed(0)+' ms'; els.status.textContent=res.status+' '+(res.statusText||''); var ct=res.headers.get('content-type')||''; els.ctype.textContent=ct||'\u2013'; var size=res.headers.get('content-length'); var hdr='';res.headers.forEach(function(v,k){hdr+=k+': '+v+'\n'}); els.respHeaders.textContent=hdr.trim(); return res.text().then(function(text){ if(!size)size=(new Blob([text])).size.toString(); els.size.textContent=size+' B'; var asJSON=/application\/json|\/json|text\/json/i.test(ct); var asXML=/application\/xml|text\/xml|\/xml/i.test(ct); var asHTML=/text\/html/i.test(ct); if(asJSON){var p=prettyJSON(text);els.outJSON.innerHTML=hlJSON(p)}else{els.outJSON.textContent=''} if(asXML){var px=prettyXML(text);els.outXML.innerHTML=hlXML(px)}else{els.outXML.textContent=''} if(asHTML){els.outHTML.srcdoc=text}else{els.outHTML.removeAttribute('srcdoc')} els.outPlain.textContent=text; els.outCurl.textContent=makeCurl(url,method,headers,body||''); if(asJSON)switchTab('json');else if(asXML)switchTab('xml');else if(asHTML)switchTab('html');else switchTab('plain'); saveHistory({method:method,url:url,headers:headers,body:body||'',ctJson:els.ctJson.checked}); }); }).catch(function(e){ els.status.textContent='Fehler'; els.outPlain.textContent=(e&&e.message)?e.message:String(e); els.outCurl.textContent=makeCurl(url,method,headers,body||''); switchTab('plain'); }); } els.send.addEventListener('click',send); els.copy.addEventListener('click',function(){ var active=root.querySelector('.sd-r__code.sd-is-active'); var text=active?active.innerText:(els.outHTML.getAttribute('srcdoc')||''); if(navigator.clipboard){navigator.clipboard.writeText(text);return} var ta=document.createElement('textarea');ta.value=text;document.body.appendChild(ta);ta.select();document.execCommand('copy');ta.remove(); }); els.download.addEventListener('click',function(){ var active=root.querySelector('.sd-r__code.sd-is-active'); var content=active?active.innerText:(els.outHTML.getAttribute('srcdoc')||''); var blob=new Blob([content],{type:'text/plain;charset=utf-8'}); var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='response.txt'; document.body.appendChild(a);a.click();a.remove();URL.revokeObjectURL(a.href); }); els.url.addEventListener('keydown',function(ev){if((ev.ctrlKey||ev.metaKey)&&ev.key==='Enter')send()}); els.body.addEventListener('keydown',function(ev){if((ev.ctrlKey||ev.metaKey)&&ev.key==='Enter')send()}); })();

Praktisch zum Testen – aber sobald eine Schnittstelle wirklich angebunden oder neu gebaut werden muss, wird aus dem Tool ein Projekt. Genau hier setzt SERVIT an: API-Schnittstellen entwickeln und anbinden – ob ERP, CRM, Buchhaltung oder Zahlungsanbieter. Und wenn ein eigenes Backend dahintergehört, entsteht es sauber mit einem maßgeschneiderten Laravel-Backend.

Mit dem REST API Tester prüfst du Endpoints direkt im Browser. Wähle Methode und URL, setze Header, füge Body (raw) hinzu und sende den Request. Die Antwort siehst du übersichtlich als JSON, XML, HTML oder Plain – inklusive Status, Zeit, Größe und Content-Type.

Features:

  • Header-Editor inkl. Bearer/Basic-Auth

  • Body raw; optional Content-Type: application/json

  • cURL-Kommando zum Kopieren

  • History deiner letzten Requests (localStorage)

  • Response-Headers einsehbar

  • Optionaler CORS-Proxy für APIs ohne CORS

Datenschutz: Das Tool läuft im Browser. Wir speichern oder übertragen keine Inhalte – außer deinem Request zur Ziel-API (bzw. über deinen eigenen Proxy, wenn aktiviert).