1"use strict";(globalThis.webpackChunkschulconnex=globalThis.webpackChunkschulconnex||[]).push([[1579,2116,2940,6899],{28453(e,n,t){t.d(n,{R:()=>l,x:()=>d});var r=t(96540);const i={},s=r.createContext(i);function l(e){const n=r.useContext(s);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),r.createElement(s.Provider,{value:n},e.children)}},34307(e,n,t){t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>c,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"allgemeines","title":"Allgemeines","description":"Kernanwendungsf\xe4lle","source":"@site/docs/allgemeines.md","sourceDirName":".","slug":"/allgemeines","permalink":"/docs/allgemeines","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{}}');var i=t(74848),s=t(28453);t(47936),t(55126);const l={},d="Allgemeines",u={},a=[{value:"Kernanwendungsf\xe4lle",id:"kernanwendungsf\xe4lle",level:2}];function o(e){const n={h1:"h1",h2:"h2",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"allgemeines",children:"Allgemeines"})}),"\n",(0,i.jsx)(n.h2,{id:"kernanwendungsf\xe4lle",children:"Kernanwendungsf\xe4lle"}),"\n",(0,i.jsx)(n.p,{children:"Prinzipiell unterst\xfctzt die API zwei grundlegend unterschiedliche Anwendungsf\xe4lle: Zum\neinen die Bereitstellung von Nutzer- und Kontextdaten im Zusammenhang mit einem Single\nSign-on f\xfcr Anwendungen (Dienste), zum anderen die Synchronisation von Nutzer- und\nKontextdaten zwischen Schulverwaltungssystemen (Quellsystemen)."}),"\n",(0,i.jsx)(n.p,{children:"Ein Schulconnex-Service ist ein Dienst, welcher APIs nach den Vorgaben der Schulconnex-Spezifikation bereitstellt. Der Zugriff auf alle Endpunkte der REST-APIs eines Schulconnex-Services wird durch einen zentralen Authentifizierungs- und Autorisierungsserver gesichert.\nEin Zugriff auf die Endpunkte darf nur mit einem g\xfcltigen, von diesem Server ausgestellten\nAccess-Token m\xf6glich sein. Um Access-Token f\xfcr die API-Nutzung zu erhalten, m\xfcssen\nQuellsysteme und Dienste als Clients mit einer Client-ID registriert sein."})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},47936(e,n,t){t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>u,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"allgemeines-dienste","title":"Schulconnex-Dienste-API","description":"Dienste (Anwendungen) nutzen die Schulconnex-Dienste-API zum Abruf von Nutzer- und","source":"@site/docs/allgemeines-dienste.md","sourceDirName":".","slug":"/allgemeines-dienste","permalink":"/docs/allgemeines-dienste","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{},"sidebar":"spezDiensteSidebar","next":{"title":"Datenmodell","permalink":"/docs/datenmodell-dienste/datenmodell"}}');var i=t(74848),s=t(28453),l=t(58044);const d={},u="Schulconnex-Dienste-API",a={},o=[...l.toc];function c(e){const n={h1:"h1",header:"header",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"schulconnex-dienste-api",children:"Schulconnex-Dienste-API"})}),"\n",(0,i.jsx)(n.p,{children:"Dienste (Anwendungen) nutzen die Schulconnex-Dienste-API zum Abruf von Nutzer- und\nKontextdaten."}),"\n",(0,i.jsx)(n.p,{children:"Ein Zugriff auf die API ist in drei unterschiedlichen Sicherheitskontexten m\xf6glich:"}),"\n",(0,i.jsxs)(n.p,{children:["Aufruf im ",(0,i.jsx)(n.strong,{children:"Sicherheitskontext einer angemeldeten nutzenden Person mit Zugriff auf den\nPersonenkontext"}),", mit dem die Person angemeldet ist. Bei dieser Art des Zugriffs werden nur\ndie Daten, die sich auf den konkreten Personenkontext beziehen, mit dem die oder der\nNutzende angemeldet ist, durch die REST-API bereitgestellt. Dies ist der Standard-Zugriff f\xfcr\nDienste. Dieser Zugriff setzt einen Authentifizierungs- und Autorisierungsvorgang des oder\nder Nutzenden durch den Server voraus, bei dem ein entsprechender Access-Token f\xfcr den\nZugriff auf den Endpunkt ausgestellt wird."]}),"\n",(0,i.jsxs)(n.p,{children:["Aufruf im ",(0,i.jsx)(n.strong,{children:"Sicherheitskontext einer angemeldeten Person mit Zugriff auf alle\nPersonenkontexte der Person"}),". Nur angemeldeten Personen mit besonderem Vertrauensstatus\nkann es erm\xf6glicht werden, auf die vollst\xe4ndigen Daten einer Person (alle Personenkontexte)\nzuzugreifen. Dieser Zugriff setzt ebenfalls einen Authentifizierungs- und Autorisierungsvorgang\ndes oder der Nutzenden durch den Server voraus, bei dem ein entsprechender Access-Token\nf\xfcr den Zugriff auf den Endpunkt ausgestellt wird."]}),"\n",(0,i.jsxs)(n.p,{children:["Aufruf im ",(0,i.jsx)(n.strong,{children:"Sicherheitskontext des Dienstes mit Zugriff auf alle Daten"}),", die f\xfcr sie freigegeben\nsind. Diese Art des Zugriffs erlaubt den Diensten eine (periodische) Synchronisierung der bei\nihnen gehaltenen Daten mit den Daten des Schulconnex-Services, ohne dass sich die\nnutzenden Personen aktiv anmelden m\xfcssen. Der Zugriff erfolgt mit einem Access-Token,\nden der Authentifizierungsserver und Autorisierungsserver f\xfcr den Dienst ausstellt. Dieser\nSicherheitskontext wird aktuell zum periodischen Abgleich von gel\xf6schten Daten verwendet."]}),"\n","\n",(0,i.jsx)(l.default,{})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},55126(e,n,t){t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>u,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"allgemeines-qs","title":"Schulconnex-Quellsysteme-API","description":"Ein Schulconnex-Service kann gegebenenfalls die Nutzung von HTTP-Methoden f\xfcr einzelne Quellsysteme","source":"@site/docs/allgemeines-qs.md","sourceDirName":".","slug":"/allgemeines-qs","permalink":"/docs/allgemeines-qs","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{},"sidebar":"spezQuellsystemeSidebar","next":{"title":"Datenmodell","permalink":"/docs/datenmodell-qs/datenmodell"}}');var i=t(74848),s=t(28453),l=t(58044);const d={},u="Schulconnex-Quellsysteme-API",a={},o=[...l.toc];function c(e){const n={h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"schulconnex-quellsysteme-api",children:"Schulconnex-Quellsysteme-API"})}),"\n",(0,i.jsx)(n.p,{children:"Ein Schulconnex-Service kann gegebenenfalls die Nutzung von HTTP-Methoden f\xfcr einzelne Quellsysteme\neinschr\xe4nken, beispielsweise nur auf HTTP-GET (und HTTP-HEAD). Wird eine andere Methode benutzt, so erfolgt\neine Fehlermeldung (405/01)."}),"\n",(0,i.jsx)(n.p,{children:"Beim Lesen von Datens\xe4tzen von einem Schulconnex-Server k\xf6nnen auch Attribute mitgeliefert werden, welche\ndurch Quellsysteme nicht ver\xe4ndert werden d\xfcrfen, beispielsweise die Mandanten-ID. Bei UPDATE-Operationen\nk\xf6nnen diese Attribute oft weggelassen werden (genaueres ist bei den entsprechenden Funktionen angegeben).\nWerden die Attribute bei der UPDATE-Operation angegeben, so m\xfcssen sie allerdings dem vorher ausgelesenen\nWert entsprechen. Bei einer Abweichung wird eine Fehlermeldung ausgegeben."}),"\n","\n",(0,i.jsx)(l.default,{})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},58044(e,n,t){t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>c,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"allgemeines-leere-inhalte","title":"allgemeines-leere-inhalte","description":"Leere Inhalte in JSON-Antworten","source":"@site/docs/allgemeines-leere-inhalte.md","sourceDirName":".","slug":"/allgemeines-leere-inhalte","permalink":"/docs/allgemeines-leere-inhalte","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{}}');var i=t(74848),s=t(28453);const l={},d=void 0,u={},a=[{value:"Leere Inhalte in JSON-Antworten",id:"leere-inhalte-in-json-antworten",level:2}];function o(e){const n={code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"leere-inhalte-in-json-antworten",children:"Leere Inhalte in JSON-Antworten"}),"\n",(0,i.jsx)(n.p,{children:"Schulconnex-Server d\xfcrfen keine JSON-Objekte ohne Inhalte ausliefern."}),"\n",(0,i.jsx)(n.p,{children:"Dies gilt sowohl f\xfcr einzelne Attribute, f\xfcr die kein Wert in der Antwort ausgeliefert wird, als auch f\xfcr Arrays, die keine Elemente enthalten, und auch f\xfcr komplexe JSON-Objekte, welche nur Attribute oder Unter-Objekte ohne Inhalte enthalten."}),"\n",(0,i.jsxs)(n.p,{children:["Ein einzelnes Attribut hat dann keinen Wert, wenn dieser nie gesetzt wurde und in der Spezifikation kein Default-Wert definiert ist, oder wenn ein vorhandener Wert gel\xf6scht oder bei einem PATCH auf ",(0,i.jsx)(n.code,{children:"null"})," gesetzt wurde. Unabh\xe4ngig davon, ob ein Client im Prinzip auf dieses Attribut zugreifen kann, d\xfcrfen solche Attribute von Schulconnex-Servern nicht ausgeliefert werden."]}),"\n",(0,i.jsx)(n.p,{children:"Dies gilt auch f\xfcr komplexe JSON-Objekte, wenn alle enthaltenen, f\xfcr einen Client lesbaren, Attribute leer sind."}),"\n",(0,i.jsx)(n.p,{children:"Ist, beispielsweise, zur Geburt einer Person nur der Ort und nicht das Datum gesetzt, so liefert der Server in der Antwort auch nur:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:'"geburt": {\n "geburtsort": "Berlin, Deutschland"\n }\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Ist auch der Geburtsort nicht gesetzt, so wird das Objekt ",(0,i.jsx)(n.code,{children:"geburt"})," in der Antwort nicht geliefert."]}),"\n",(0,i.jsxs)(n.p,{children:["Hat ein Dienst nur Zugriff auf das Attribut ",(0,i.jsx)(n.code,{children:"geburt.datum"}),", so darf das Objekt ",(0,i.jsx)(n.code,{children:"geburt"})," in beiden F\xe4llen nicht geliefert werden."]}),"\n",(0,i.jsx)(n.p,{children:"Hierdurch sollen Inkonsistenzen im Verhalten unterschiedlicher Schulconnex-Server vermieden werden und verhindert werden, dass Dienste implizit R\xfcckschl\xfcsse auf f\xfcr diese nicht vertraglich freigegebene Attribute ziehen k\xf6nnen."}),"\n",(0,i.jsxs)(n.p,{children:["Eine Ausnahme von diesem Verhalten besteht bei der Nutzung von Filtern beim Lese-Zugriff auf Daten. Wird, beispielsweise durch die Nutzung von Filtern, auf eine Anfrage kein R\xfcckgabewert geliefert, so muss ein Schulconnex-Server eine leere Liste ",(0,i.jsx)(n.code,{children:"[]"})," liefern."]})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.