Získávání dat z datového zdroje je jistě často prováděná operace, ale změny v datech nemůžeme opomenout. Ani v tomto směru nás ADO.NET Data Services nenutí psát mnoho kódu.
reklama
Získávání dat z datového zdroje je jistě často prováděná operace, ale změny v datech nemůžeme opomenout. Ani v tomto směru nás ADO.NET Data Services nenutí psát mnoho kódu.
Vytvoření entity
První operací, kterou potřebujeme, je bezesporu vytvoření entity – bez žádných dat v např. databázi je pak i dotazování mlácením prázdné slámy. Pro vytvoření nové entity se používá příkaz HTTP POST. Vlastním obsahem tohoto příkazu jsou poté data pro novou entitu ve formátu definovaném v hlavičce Content-Type – XML nebo JSON. Pokud některá hodnota není definována, je vložena implicitní hodnota (je-li to možné). Odpovědí je následně nově vytvořená entita, s doplněnými hodnotami pro vlastnosti, které nebyly zadány, případně, které byly změněny úložištěm (např. spouští). Celý obsah se posílá na URI dané množiny entit. Chceme-li si vytvořit například novou entitu b, musí být požadavek POST zaslán na http://localhost:2634/MyDataService.svc/b. XML může vypadat např.:
<entry xmlns:ads="http://schemas.microsoft.com/ado/2007/08/dataweb" xmlns="http://www.w3.org/2005/Atom">
<content type="application/xml">
<ads:y>rrr</ads:y>
</content>
</entry>
Pro JSON např.:
{
y: "rrr"
}
Pravděpodobně jej však nebudete generovat ručně, ale využijete nástrojů dostupných pro ADO.NET Data Services,o kterých si povíme v příštím díle.
Změna entity
Pro změny dat se využívá příkaz HTTP PUT. V předaných datech stačí uvést pouze vlastnosti, které se změnily. Ostatní zůstanou nedotčeny. Vlastní reprezentace je stejná jako při vytváření entity. Výsledkem je opět kompletní entita se změněnými vlastnostmi. Požadavek se posílá přímo na URI konkrétní entity, tedy např.: http://localhost:2634/MyDataService.svc/b(6).
Chceme-li změnit asociaci s jinou entitou, můžeme využít možnosti specifikovat změnu pomocí URI a odkázat se přímo na entitu, na kterou chceme asociaci změnit.
<entry xmlns:ads="http://schemas.microsoft.com/ado/2007/08/dataweb" xmlns="http://www.w3.org/2005/Atom" xml:base="http://localhost:2634/MyDataService.svc/">
<content type="application/xml">
</content>
<link rel="related" title="b">
<entry>
<id>b(1)</id>
</entry>
</link>
</entry>
Pozorný čtenář si jistě všimnul, že tento postup bude dobře fungovat pro asociace, které mají na „jednom konci“ 1 – 1:N, 1:1, 1:0..1 apod. ADO.NET Data Services řeší změny asociací s N na „druhém konci“ jako přidávání a mazání. Přidávání se provádí zasláním HTTP POST požadavku (obsah dat stejný jako výše) na URI s navigačním elementem. Mazání zasláním HTTP DELETE na konkrétní entitu přes navigační vlastnost. Příklad vše osvětlí.
Předpokládejme náš ukázkový model, kdy entita b, může být spojena s více entitami base ([b] 1:N [base]). Pro přidání další base entity je třeba zaslat požadavek na http://localhost:2634/MyDataService.svc/b(1)/base. A smazání je třeba vyvolat na http://localhost:2634/MyDataService.svc/b(1)/base(6) pro smazání entity s ID 6.
Vzhledem k vazbě 1:N je možné tuto změnu provést „z druhé strany“; pro entitu base. Nechtěl jsem však čtenáře zbytečně zatěžovat novým příkladem pro M:N, šlo mi především o pochopení URI, kam se požadavky zasílají.
Smazání entity
Poslední operací, kterou můžete provádět v rámci změn dat, je mazání. K tomuto účelu výborně poslouží příkaz HTTP DELETE. Požadavek jde opět přímo na konkrétní entitu, kterou chceme smazat, tedy např.: http://localhost:2634/MyDataService.svc/b(6). Odpověď se stavovým kódem 204 indikuje úspěch. Stavové kódy 4xx resp. 5xx indikují, podle definice protokolu HTTP, chybu. Jednoduché, jasné.
Dávkové operace
Uvědomíme-li si primární zaměření ADO.NET Data Services, a sice provoz přes síť, může vyvstat otázka, zdali je možné provádět operace dávkově. Například přidat entitu a k ní další asociované. Výše uvedenými postupy může takovéto přidání znamenat několik síťových round-tripů, což především na sítích s velkou latencí, typicky GPRS/EDGE, způsobí citelné prodlevy. Dobrou zprávou je, že je možné službě poslat celý graf nových/změněných entit a tyto budou zpracovány v jedné dávce. Zde s jistotou předpokládám, že takové XML nebo JSON data nebudete vytvářet ručně, ale využijete nástrojů – proto nebudu uvádět žádný příklad.
V krátkém úvodu jsme se naučili základní věci kolem ADO.NET Data Services a jsme schopni nahlédnout, co vše umí nebo neumí (alespoň v základu). Protože všechny jsme prošli všechny běžné operace, podíváme se příště na nástroje, které nám umožní volání služby a posílání dat na službu zjednodušit – především sestavit veškerou omáčku okolo za nás.