{"id":3482,"date":"2025-07-21T09:23:24","date_gmt":"2025-07-21T07:23:24","guid":{"rendered":"https:\/\/www.thecodecampus.de\/blog\/?p=3482"},"modified":"2026-04-09T11:28:30","modified_gmt":"2026-04-09T09:28:30","slug":"reactive-apis-in-angular-resource-api-teil-1","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/","title":{"rendered":"Reactive APIs in Angular Teil 1 &#8211; Resource API resource() und rxResource()"},"content":{"rendered":"<p><em><strong>Click <a href=\"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-part-1\/\">here<\/a> for the english version of this blog post.<\/strong><\/em><\/p>\n<h2>Reactive APIs in Angular 20: Kommuniziere asynchron mit Signals durch die Resource API<\/h2>\n<p>Mit Angular 19 wurde eine reactive API als neues Feature eingef\u00fchrt, die Resource API. Zwar gilt die API, auch jetzt in v20, noch als experimentelles Feature, kann aber bereits von Dir verwendet werden. Wenn Du wissen willst, was die Resource API ist, welches Problem sie l\u00f6sen kann, wof\u00fcr man sie nutzen sollte und wof\u00fcr nicht, dann bist Du hier genau richtig. Dieser Artikel ist Teil des <a href=\"https:\/\/www.thecodecampus.de\/blog\/angular-guide-signals-und-hot-topics\/\">Angular Guides<\/a>, in dem wir bereits viele spannende Themen zu Angular erforschen.\u00a0 Der Guide gibt dir einen \u00dcberblick \u00fcber aktuelle Themen, angefangen mit: Was sind eigentlich Signals und welche Vorteile bringen Sie mit?<\/p>\n<p>Wir f\u00fchren unser Reise durch die signal-basierten Features von Angular mit einem Einblick in die neuen Funktionen der Resource API fort. Im diesem ersten Teil betrachten wir die Grundlagen von <code>resource()<\/code> und <code>rxResource()<\/code>. Im zweiten Teil experimetieren wir mit der neueren <code>httpResource()<\/code>, womit man HTTP-Requests erleichtert und diese direkt als Signal ausgeben kann.<\/p>\n<h2>Was ist die neue Resource API?<\/h2>\n<p>Bisher haben sich Signals in Angular nur auf den synchronen Datenfluss konzentriert. Zust\u00e4nde abspeichern, Inputs, Queries, etc. Mit dem neuen Angular Update sollen asynchrone Operationen in Signals integriert werden. Der erste Schritt in diese Richtung wird mit der Resource API getestet. Eine Resource ist eine asynchrone Dependency, die mit Signals integriert wird. Man kann sich eine Resource so vorstellen, dass sie aus drei Teilen besteht:<\/p>\n<ol>\n<li>Eine <code>params<\/code> Funktion, welche die Abh\u00e4ngigkeit der Resource von einem oder mehreren Signals definiert. Hier l\u00e4dt die Resource automatisch neu wenn sich <code>this.page()<\/code> \u00e4ndert\n<pre class=\"lang:default decode:true\">params: () =&gt; this.page(),  \/\/ Signal-basierte Anfrage (hier: Paginierung)<\/pre>\n<\/li>\n<li>Ein <code>loader\/stream<\/code> der eine asynchrone Operation durchf\u00fchrt, wenn sich die Anfrage \u00e4ndert, und einen neuen Wert zur\u00fcckgibt. Zusammen mit der Params-Funktion werden hier also jedesmal neu die Produktdaten aufgerufen, wenn sich die Seitenzahl \u00e4ndert.\n<pre class=\"lang:default decode:true\">loader: ({ params: page }) =&gt; \r\n  fetch(`https:\/\/dummyjson.com\/products?limit=10&amp;skip=${(page - 1) * 10}`)\r\n    .then((res) =&gt; {\r\n      return res.json();  \/\/ Gibt Produktdaten zur\u00fcck\r\n    }),<\/pre>\n<\/li>\n<li>Die resultierende Instanz der Resource, die selber verschiedene Signals bereitstellt, enth\u00e4lt den Wert und den Status der Resource. Der Wert wird dabei asynchron mitgeteilt, also erst sobald dieser verf\u00fcgbar ist. Der Status einer Resource kann <code>loading<\/code>, <code>resolved<\/code>, <code>errored<\/code>, &#8230; sein.\n<pre class=\"lang:default decode:true\">products = resource({ ... });  \/\/ Resource-Instanz<\/pre>\n<\/li>\n<\/ol>\n<p>Das komplette Beispiel kannst du unten in unserem StackBlitz Projekt ausprobieren. Mehr zur Resource API kannst du auch in der <a href=\"https:\/\/angular.dev\/guide\/signals\/resource\">offiziellen Angular Dokumentation<\/a> finden.<\/p>\n<h2>resource() vs rxResource() vs httpResource()<\/h2>\n<p>Die Resource API bietet drei Methoden an. Die drei Methoden haben eine \u00e4hnliche Funktionsweise aber unterschiedliche Anwendungsf\u00e4lle.<\/p>\n<p><a href=\"https:\/\/angular.dev\/guide\/signals\/resource\"><code>resource()<\/code><\/a> ist die &#8220;Basic&#8221; Variante der drei Methoden und arbeitet mit Promises. Du solltest diese Methode benutzen, wenn du Javascript <code>fetch<\/code> bevorzugst um Daten abzurufen.<\/p>\n<p><code><a href=\"https:\/\/angular.dev\/api\/core\/rxjs-interop\/rxResource\">rxResource()<\/a><\/code> ist die &#8220;Reactive&#8221; Variante. Sie benutzt Oberservables. Du solltest diese Methode benutzen, wenn du bereits mit <a href=\"https:\/\/rxjs.dev\/guide\/overview\">RxJS<\/a> arbeitest oder RxJS bevorzugst. Du kannst sie auch verwenden, wenn du das Ergebnis durch Oberservable Operators pipen willst. Da der <code>HttpClient<\/code> von Angular Observable-basiert ist, bietet sich hier die <code>rxResource()<\/code> an.<\/p>\n<p><code><a href=\"https:\/\/angular.dev\/guide\/http\/http-resource\">httpResource()<\/a><\/code> ist die einfachste und flexibelste Variante. Mit einfacher Syntax kann man eine HTTP Request mit URL und optionalen Parameter stellen und sogar ein Request-Objekt definieren. \u00dcber <code>httpResource()<\/code> soll es auch im zweiten Teil dieses Artikels nochmal genauer gehen.<\/p>\n<p><a style=\"display: inline-block;\" href=\"https:\/\/www.thecodecampus.de\/schulungen\/angular\">\n<picture><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_medium.png\" media=\"(min-width: 600px)\" \/><\/picture> <picture><img decoding=\"async\" class=\"alignnone size-full wp-image-38\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/angular-schulungen_anne_WP_small.png\" alt=\"Angular Schulungen\" \/><\/picture> <\/a><\/p>\n<h2>Welches Problem l\u00f6st die Resource API?<\/h2>\n<p>Bisher mussten asynchrone Daten (z.B. HTTP-Requests) in Angular \u00fcber <a href=\"https:\/\/rxjs.dev\/guide\/observable\">RxJS Observables<\/a> verarbeitet werden \u2013 inklusive manuellem subscribe und unsubscribe. F\u00fcr die UI-Aktualisierung war dabei <code>zone.js<\/code> verantwortlich, was bei komplexen Apps oft zu Performance-Problemen f\u00fchrte.<\/p>\n<p>Mit Signals wurde die reaktive Zustandsverwaltung deutlich effizienter, aber es fehlte eine elegante M\u00f6glichkeit, asynchrone Operationen, wie API-Calls, direkt in Signals zu integrieren. Entwickler mussten Workarounds wie <code>toSignals()<\/code> oder manuelle Promises nutzen, was umst\u00e4ndlich und fehleranf\u00e4llig war.<\/p>\n<p>Die Resource-API schlie\u00dft die L\u00fccke, indem sie asynchrone Daten direkt als Signals bereitstellt &#8211; ohne subscribe und <code>zone.js<\/code>:<\/p>\n<pre class=\"lang:default decode:true\">\/\/ Beispiel: API-Request als Signal\r\nproducts = resource({\r\n  params: () =&gt; this.page(),\r\n  loader: ({ params: page }) =&gt; fetch(`\/api\/products?page=${page}`)\r\n});<\/pre>\n<p>Au\u00dferdem erm\u00f6glicht die Resource API auch abbrechbare Anfragen &#8211; besonders n\u00fctzlich bei GET-Requests. Wenn ein Nutzer schnell zwischen Seiten wechselt, werden veraltete Requests automatisch abgebrochen.<\/p>\n<p>Die Resource API ist n\u00fctzlich wenn Du asynchrone Daten empfangen willst. Sie hilft dabei, die Daten direkt in ein Signal umzuwandeln, damit Du sofort damit arbeiten kannst ohne einen gro\u00dfen Workaround. Au\u00dferdem erlaubt Resource das Unterbrechen von Requests. Resource erlaubt ein <code>abortSignal<\/code>, womit man Requests schnell unterbrechen kann und stattdessen eine andere Request bearbeiten kann. Sollte der Nutzer also aus irgendwelchen Gr\u00fcnden mal mehrere Requests schnell hintereinander stellen, indem er beispielsweise schnell auf verschiedene Buttons dr\u00fcckt, dann unterbricht Resource diese Requests und leitet nur die Neuste weiter. Dies macht die Anwendung effizienter. Einer Sache muss man sich hier aber bewusst sein, dadurch, dass man Requests unterbrechen kann, k\u00f6nnten Daten verloren gehen, wenn Resource mit POST-Request Operationen benutzt wird.<\/p>\n<p>Deshalb solltest Du Resource nur f\u00fcr GET-Requests benutzen, also um Daten in Signals zu laden. Du solltest Resource nicht f\u00fcr POST-Requests benutzen, um Daten zu senden.<\/p>\n<h2>Beispiel: resource()<\/h2>\n<p>Hier ist ein Teil aus unserem StackBlitz Beispiel. In diesem Beispiel wird die DummyJson Seite gefetched und daraus Daten geladen. Es wird ein Objekt an <code>resource()<\/code> \u00fcbergeben. Das Objekt hat die <code>params<\/code> und <code>loader<\/code> Funktion, wie oben erkl\u00e4rt, und au\u00dferdem auch ein <code>abortSignal<\/code>.<\/p>\n<pre class=\"lang:default decode:true\">loader: ({ params: page, abortSignal }) =&gt;\r\n  fetch(`https:\/\/dummyjson.com\/products?limit=10&amp;skip=${(page - 1) * 10}`, {\r\n     signal: abortSignal,\r\n   })<\/pre>\n<p>Das <code>abortSignal<\/code> bricht hier die Request \u00fcber einen AbortController ab, wenn eine neue Seite geladen werden soll, w\u00e4hrend eine andere am laden ist. Das kannst du selber ausprobieren, indem Du den Network-Tab in den Inspector-Tools im StackBlitz-Projekt \u00f6ffnest und dann sehr schnell auf &#8220;Next&#8221; dr\u00fcckst. Hier siehst Du wie bei Requests der Status &#8220;(cancelled)&#8221; erscheint. Daf\u00fcr ist das <code>abortSignal<\/code> verantwortlich. Durch das Unterbrechen der Anfragen werden weniger Netzwerk-Ressourcen verwendet, was bei gr\u00f6\u00dferen Websiten ziemlich n\u00fctzlich sein kann.<\/p>\n<p>Eine Resource besitz noch weitere Eigenschaften wie <code>value<\/code>, <code>status<\/code>, <code>isLoading<\/code>, <code>error<\/code>, etc. mehr Details zu einer Resource kannst Du <a href=\"https:\/\/angular.dev\/api\/core\/Resource\">hier<\/a> nachschauen. \u00dcber <code>products.value()<\/code> wird in unserem Beispiel der Wert der geholten Json abgefragt.<\/p>\n<pre class=\"lang:default decode:true\">ngIf=\"products.value()?.products as productList<\/pre>\n<p>Dadurch wird die Liste gebildet mit der die verschiedenen Werte der Produkte aus DummyJson angezeigt werden.<\/p>\n<p>Hier ist der komplette Code zu dem Beispiel von <code>resource()<\/code>. Wie bereits erw\u00e4hnt kannst Du diesen auch wieder im StackBlitz-Projekt bearbeiten und damit experimentieren. In der <a href=\"https:\/\/angular.dev\/guide\/signals\/resource\">Dokumentation<\/a> findest du noch mehr Details zum Umgang mit <code>resource()<\/code>.<\/p>\n<pre class=\"lang:default decode:true\">@Component({\r\n  selector: 'app-resource',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: `\r\n    &lt;button (click)=\"page.set(page() - 1)\" [disabled]=\"page() === 1\"&gt;Previous&lt;\/button&gt;\r\n    Page: {{ page() }}\r\n    &lt;button (click)=\"page.set(page() + 1)\"&gt;Next&lt;\/button&gt;\r\n    &lt;ul *ngIf=\"products.value()?.products as productList\"&gt;\r\n      &lt;li *ngFor=\"let product of productList\"&gt;\r\n        {{ product.title }} ({{ product.price }} \u20ac)\r\n      &lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n  `,\r\n})\r\nexport class ResourceComponent {\r\n  page = signal(1);\r\n\r\n  products = resource({\r\n    params: () =&gt; this.page(),\r\n    loader: ({ params: page, abortSignal }) =&gt;\r\n      fetch(`https:\/\/dummyjson.com\/products?limit=10&amp;skip=${(page - 1) * 10}`, {\r\n        signal: abortSignal,\r\n      }).then((res) =&gt; {\r\n        if (!res.ok) throw new Error('Failed to fetch');\r\n        return res.json();\r\n      }),\r\n  });\r\n}<\/pre>\n<h2>Beispiel: rxResource<\/h2>\n<p>Dieses <code>rxResource()<\/code> Beispiel ist sehr \u00e4hnlich zu dem Vorherigen. Statt <code>resource()<\/code>\u00a0 wird nun aber <code>rxResource()<\/code> verwendet, was es erlaubt den <code>HttpClient<\/code> ziemlich einfach zu verwenden. Daf\u00fcr wird der <code>HttpClient<\/code> zuerst injected.<\/p>\n<pre class=\"lang:default decode:true \">private http = inject(HttpClient);<\/pre>\n<p>Im <code>loader<\/code>, welcher seit Angular v20 f\u00fcr <code>rxResource()<\/code> <code>stream<\/code>\u00a0hei\u00dft, wird nun eine Url aufgerufen und dabei ein Observable zur\u00fcckgegeben.<\/p>\n<pre class=\"lang:default decode:true\">stream: ({ params: page }) =&gt; this.http .get&lt;any&gt;( `https:\/\/dummyjson.com\/products?limit=10&amp;skip=${(page - 1) * 10}` )<\/pre>\n<p><code>rxResource()<\/code> subscribed und unsubscribed auf dem Observable automatisch. Auch anders als bei <code>resource()<\/code>: Es wird kein <code>abortSignal<\/code> ben\u00f6tigt, da <code>rxResource()<\/code> auch das Abbrechen von GET-Requests automatisch \u00fcbernimmt. Du kannst das auch wieder testen, indem Du bei dem <code>rxResource()<\/code> Beispiel im StackBlitz-Projekt wieder schnell auf &#8220;Next&#8221; dr\u00fcckst und im Network-Tab nachschaust was passiert. Auch ohne ein <code>abortSignal<\/code> wird hier f\u00fcr die GET-Requests der Status &#8220;(cancelled)&#8221; angezeigt.<\/p>\n<p>Da wir RxJs verwenden, haben wir mit <code>rxResource()<\/code> au\u00dferdem auch Zugriff auf die <code>pipe()<\/code> Funktion, womit wir die erhaltenen Daten, wie bei RxJS gewohnt, transformieren k\u00f6nnen.<\/p>\n<p>Hier ist der komplette Code zum <code>rxResource()<\/code> Teil des StackBlitz-Projekts. Und auch hier nat\u00fcrlich der Link zur <a href=\"https:\/\/angular.dev\/api\/core\/rxjs-interop\/rxResource\">Dokumentation<\/a>.<\/p>\n<pre class=\"lang:default decode:true\">@Component({\r\n  selector: 'app-rxresource',\r\n  standalone: true,\r\n  imports: [CommonModule, HttpClientModule],\r\n  template: `\r\n    &lt;button (click)=\"page.set(page() - 1)\" [disabled]=\"page() === 1\"&gt;Previous&lt;\/button&gt;\r\n    Page: {{ page() }}\r\n    &lt;button (click)=\"page.set(page() + 1)\"&gt;Next&lt;\/button&gt;\r\n\r\n    &lt;ul *ngIf=\"products.value() as productList\"&gt;\r\n      &lt;li *ngFor=\"let product of productList\"&gt;\r\n        {{ product.title }} ({{ product.price }} \u20ac)\r\n      &lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n  `,\r\n})\r\nexport class RxResourceComponent {\r\n  private http = inject(HttpClient);\r\n  page = signal(1);\r\n\r\n  products = rxResource({\r\n    params: this.page,\r\n    stream: ({ params: page }) =&gt;\r\n      this.http\r\n        .get&lt;any&gt;(\r\n          `https:\/\/dummyjson.com\/products?limit=10&amp;skip=${(page - 1) * 10}`\r\n        )\r\n        .pipe(\r\n          map((response) =&gt; response.products),\r\n          catchError((error) =&gt; {\r\n            console.error('API error:', error);\r\n            throw error;\r\n          })\r\n        ),\r\n  });\r\n}<\/pre>\n<h2>Erfahrung ist der beste Lehrer: Hands-On f\u00fcr die Resource API<\/h2>\n<p>Bist Du bereit, die Theorie in die Praxis umzusetzen? In diesem interaktiven StackBlitz-Beispiel befindet sich die vorgestellte Beispielanwendung, die die Grundkonzepte von Resource aufgreift und die vorgestellten Beispiele und Funktionen beinhaltet.<\/p>\n<p><iframe height=\"400\" style=\"width: 100%;\" src=\"https:\/\/stackblitz.com\/edit\/stackblitz-starters-dtuw9plw?embed=1&amp;file=src%2FresourceAPI%2Fresource.component.ts\" scrolling=\"no\"><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">\ufeff<\/span><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">\ufeff<\/span><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\">\ufeff<\/span><\/iframe><\/p>\n<h2>Und jetzt?<\/h2>\n<p>Wie schon angek\u00fcndigt, soll es in <a href=\"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-2\/\">Teil 2<\/a> dann um die <code>httpResource()<\/code> gehen. Wir zeigen Dir wo die Unterschiede zu <code>resource()<\/code> und <code>rxResource()<\/code> liegen und wie Du <code>httpResource()<\/code> am besten nutzen kannst.<\/p>\n<h2 id=\"Termin\u00fcbersicht\">Termin\u00fcbersicht der n\u00e4chsten Angular Schulungen<\/h2>\n<p><iframe height=\"600\" style=\"width: 100%;\" src=\"https:\/\/thecodecampus.de\/kalender\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit Angular 19 wurde eine reactive API als neues Feature eingef\u00fchrt, die Resource API. Bisher haben sich Signals in Angular nur auf den synchronen Datenfluss konzentriert. Zust\u00e4nde abspeichern, Inputs, Queries, etc. Mit dem neuen Angular Update sollen asynchrone Operationen in Signals integriert werden. Der erste Schritt [&#8230;]<\/p>\n","protected":false},"author":40,"featured_media":3568,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[73,185,190,163,168,151,162,183,191,167],"tags":[112,187,192,181,171,37,175,193,182],"class_list":["post-3482","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular","category-angular-19","category-angular-20","category-angular-performance-optimization","category-angular-signals","category-optimization","category-performance","category-reactive-programming","category-resource-api","category-signals","tag-angular","tag-angular-19","tag-angular-20","tag-angular-performance-optimization","tag-angular-signals","tag-performance","tag-reactive-programming","tag-resource-api","tag-signals"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reactive APIs in Angular - Resource API resource() &amp; rxResource()<\/title>\n<meta name=\"description\" content=\"Reactive APIs in Angular 20: Arbeite mit der neuen Resource API! Lerne wie du asynchrone Requests mit Angular Signals verbinden kannst!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reactive APIs in Angular - Resource API resource() &amp; rxResource()\" \/>\n<meta property=\"og:description\" content=\"Reactive APIs in Angular 20: Arbeite mit der neuen Resource API! Lerne wie du asynchrone Requests mit Angular Signals verbinden kannst!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-21T07:23:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-09T09:28:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/10\/angular-resource-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Marc Dommr\u00f6se\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc Dommr\u00f6se\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/\"},\"author\":{\"name\":\"Marc Dommr\u00f6se\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/be8c4fcd8229783d0e9442dad8764770\"},\"headline\":\"Reactive APIs in Angular Teil 1 &#8211; Resource API resource() und rxResource()\",\"datePublished\":\"2025-07-21T07:23:24+00:00\",\"dateModified\":\"2026-04-09T09:28:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/\"},\"wordCount\":1223,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/angular-resource-api.png\",\"keywords\":[\"Angular\",\"Angular 19\",\"Angular 20\",\"Angular Performance Optimization\",\"Angular Signals\",\"Performance\",\"Reactive Programming\",\"Resource API\",\"Signals\"],\"articleSection\":[\"Angular\",\"Angular 19\",\"Angular 20\",\"Angular Performance Optimization\",\"Angular Signals\",\"Optimization\",\"Performance\",\"Reactive Programming\",\"Resource API\",\"Signals\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/\",\"name\":\"Reactive APIs in Angular - Resource API resource() & rxResource()\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/angular-resource-api.png\",\"datePublished\":\"2025-07-21T07:23:24+00:00\",\"dateModified\":\"2026-04-09T09:28:30+00:00\",\"description\":\"Reactive APIs in Angular 20: Arbeite mit der neuen Resource API! Lerne wie du asynchrone Requests mit Angular Signals verbinden kannst!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/angular-resource-api.png\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/angular-resource-api.png\",\"width\":1200,\"height\":1200,\"caption\":\"Angular - Resource API\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/reactive-apis-in-angular-resource-api-teil-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reactive APIs in Angular Teil 1 &#8211; Resource API resource() und rxResource()\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/be8c4fcd8229783d0e9442dad8764770\",\"name\":\"Marc Dommr\u00f6se\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/cropped-marc-dommroese-tcc-author-96x96.png\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/cropped-marc-dommroese-tcc-author-96x96.png\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/cropped-marc-dommroese-tcc-author-96x96.png\",\"caption\":\"Marc Dommr\u00f6se\"},\"description\":\"My name is Marc. I'm currently studying Computer Science at university, with one of my favorite topics being frontend development.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/marc-dommr\u00f6se-372a88318\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/mdommroese\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reactive APIs in Angular - Resource API resource() & rxResource()","description":"Reactive APIs in Angular 20: Arbeite mit der neuen Resource API! Lerne wie du asynchrone Requests mit Angular Signals verbinden kannst!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/","og_locale":"en_US","og_type":"article","og_title":"Reactive APIs in Angular - Resource API resource() & rxResource()","og_description":"Reactive APIs in Angular 20: Arbeite mit der neuen Resource API! Lerne wie du asynchrone Requests mit Angular Signals verbinden kannst!","og_url":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2025-07-21T07:23:24+00:00","article_modified_time":"2026-04-09T09:28:30+00:00","og_image":[{"width":1200,"height":1200,"url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/10\/angular-resource-api.png","type":"image\/png"}],"author":"Marc Dommr\u00f6se","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marc Dommr\u00f6se","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/"},"author":{"name":"Marc Dommr\u00f6se","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/be8c4fcd8229783d0e9442dad8764770"},"headline":"Reactive APIs in Angular Teil 1 &#8211; Resource API resource() und rxResource()","datePublished":"2025-07-21T07:23:24+00:00","dateModified":"2026-04-09T09:28:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/"},"wordCount":1223,"commentCount":0,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/10\/angular-resource-api.png","keywords":["Angular","Angular 19","Angular 20","Angular Performance Optimization","Angular Signals","Performance","Reactive Programming","Resource API","Signals"],"articleSection":["Angular","Angular 19","Angular 20","Angular Performance Optimization","Angular Signals","Optimization","Performance","Reactive Programming","Resource API","Signals"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/","url":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/","name":"Reactive APIs in Angular - Resource API resource() & rxResource()","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#primaryimage"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/10\/angular-resource-api.png","datePublished":"2025-07-21T07:23:24+00:00","dateModified":"2026-04-09T09:28:30+00:00","description":"Reactive APIs in Angular 20: Arbeite mit der neuen Resource API! Lerne wie du asynchrone Requests mit Angular Signals verbinden kannst!","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#primaryimage","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/10\/angular-resource-api.png","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/10\/angular-resource-api.png","width":1200,"height":1200,"caption":"Angular - Resource API"},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/reactive-apis-in-angular-resource-api-teil-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Reactive APIs in Angular Teil 1 &#8211; Resource API resource() und rxResource()"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/be8c4fcd8229783d0e9442dad8764770","name":"Marc Dommr\u00f6se","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/09\/cropped-marc-dommroese-tcc-author-96x96.png","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/09\/cropped-marc-dommroese-tcc-author-96x96.png","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/09\/cropped-marc-dommroese-tcc-author-96x96.png","caption":"Marc Dommr\u00f6se"},"description":"My name is Marc. I'm currently studying Computer Science at university, with one of my favorite topics being frontend development.","sameAs":["https:\/\/www.linkedin.com\/in\/marc-dommr\u00f6se-372a88318\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/mdommroese\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/3482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=3482"}],"version-history":[{"count":28,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/3482\/revisions"}],"predecessor-version":[{"id":3572,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/3482\/revisions\/3572"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media\/3568"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=3482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=3482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=3482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}