SlideShare a Scribd company logo
1 of 27
The Lightweight Approach to Building
Web Based APIs with .NET

                                     Christian Horsdal
                              Independent Consultant
                                        @chr_horsdal
                          http://horsdal.blogspot.com
Agenda

Who Am I?

What is “lightweight”
RestBucks
REST
Nancy
3



Who Am I?
Independent consultant
Husband and Father
Some who enjoys
 Clean code
 TDD’ing
 When my soccer team wins
 Simplicity
 Whisky
What is lightweight?




4
5



What is lightweight?
Low ceremony
Low cruft
Conventions
6



What is lightweight?
Open
Agile
Inexpensive
RestBucks




7
RestBucks




8
9




REST
10

Richardsons Maturity Model

   Level 3: Hypermedia

     Level 2: HTTP Verbs

     Level 1: Resources

   Level 0: POX-RPC
11



REST - Resources
The basic building blocks of a web API
Anything with a URI

http://restbucks.com/menu/
http://restbucks.com/orders/
http://restbucks.com/order/42/
http://restbucks.com/order/42/payment/
12

    REST - Representations
   GET http://restbucks.com/order/19202048/ HTTP/1.1

   Accept: application/vnd.restbucks+xml

<?xml version="1.0"?>
<order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="h
  <links>
    <link uri="http://restbucks.com/order/19202048" rel="http://restbucks
    <link uri="http://restbucks.com/order/19202048" rel="http://restbucks
    <link uri="http://restbucks.com/order/19202048" rel="http://restbucks
    <link uri="http://restbucks.com/order/19202048/payment" rel="http://r
  </links>
  <location>inShop</location>
  <cost>7.60000</cost>
  <items>
    <item>
      <name>Latte</name>
      <quantity>1</quantity>
      <milk>skim</milk>
13

 REST - Representations
GET http://restbucks.com/order/19202048/ HTTP/1.1

Accept: application/vnd.restbucks+json

    {
        "Location":inShop,
        "Cost":7.60000,
        "Items":[
          {
            "Name":"Latte",
            "Quantity":1,
            "Preferences":{
              "milk":"skim",
              "size":"large"
            }
          }
        ],
        "Status":1,
        "Links":[
14



REST - verbs
GET
POST
PUT
DELETE

HEAD
OPTIONS

PATCH
15
16



Why Nancy?
“Close” to http
Very, very readable code
Very explicit routing
Automatic content negotiation
Embraces modularity
Embraces IoC/DI
Embraces testing
Runs anywhere
Nancy Basics

public class MainModule : NancyModule
{
       public MainModule()
       {
           Get["/"] = _ => "Hello from root";
       }
  }


public class SubModule : NancyModule
{
       public SubModule() : base("subpath")
       {
           Get["/"] = _ => "Hello from subpath";
       }
}
Nancy Basics
Defines which verbs you accepts
public class MainModule : NancyModule
{
       public MainModule()
       {
           Get["/"] = _ => "Hello from root";
           Post["/"] = _ => DoPost(Request.Form.my_value);
           Delete["/{id}"] = p => Delete(p.id);
           Put["/"] = _ => DoPut(Request.Body);
           Patch["/"] = _ => DoPatch(Request.Body);
       }
  }


HEAD and OPTIONS and automatic
Restbuck on Nancy   19



Place an Order
RestBucks on Nancy   20



View/Cancel/Update
RestBucks on Nancy   21



Pay an Order
RestBucks on Nancy   22



XML, JSON or YAML
RestBucks on Nancy   23



Conditional Gets
26



Nancy.Testing
Test through the whole Nancy pipeline
Take advantage of IoC/DI
…Or not
27



Why Nancy?
“Close” to http
Very, very readable code
Very explicit routing
Automatic content negotiation
Embraces modularity
Embraces IoC/DI
Embraces testing
Runs anywhere
28



Why REST + Nancy
Lightweight
 Low ceremony
 Low cruft
 Follows conventions
 Open
 Agile
29



More …
RestBucks on Nancy: http://github.com/horsdal/Restbucks-on-Nancy
Rest in Practice: http://restinpractice.com/book.html
Nancy: www.nancyfx.org
Me:
      Twitter: @chr_horsdal
      Blog: horsdal.blogspot.com
      Email: c.horsdal@gmail.com

More Related Content

What's hot

Introduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCatsIntroduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCatsDerek Anderson
 
ITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package ManagementITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package ManagementOrtus Solutions, Corp
 
When dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniquesWhen dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniquesWim Godden
 
Push the web with HTML5
Push the web with HTML5Push the web with HTML5
Push the web with HTML5Stoyan Zhekov
 
Using multi-tenant WordPress to simplify development
Using multi-tenant WordPress to simplify developmentUsing multi-tenant WordPress to simplify development
Using multi-tenant WordPress to simplify developmentcoderaaron
 
IBM Connections Adminblast
IBM Connections AdminblastIBM Connections Adminblast
IBM Connections AdminblastLetsConnect
 
How to build a realtime, WebSockets-enabled chat in less than 5 minutes
How to build a realtime, WebSockets-enabled chat in less than 5 minutesHow to build a realtime, WebSockets-enabled chat in less than 5 minutes
How to build a realtime, WebSockets-enabled chat in less than 5 minutesDerek Edwards
 
PNWDS 2013- Restful development in Drupal 7/8
PNWDS 2013- Restful development in Drupal 7/8PNWDS 2013- Restful development in Drupal 7/8
PNWDS 2013- Restful development in Drupal 7/8Johannes Schmidt
 
Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011Draco2002
 
Ember and WebSockets
Ember and WebSocketsEmber and WebSockets
Ember and WebSocketsSteve Kinney
 
[2010]我有一个梦想
[2010]我有一个梦想[2010]我有一个梦想
[2010]我有一个梦想Twinsen Liang
 
Web performance optimization for modern web applications
Web performance optimization for modern web applicationsWeb performance optimization for modern web applications
Web performance optimization for modern web applicationsChris Love
 
Midwest php 2013 deploying php on paas- why & how
Midwest php 2013   deploying php on paas- why & howMidwest php 2013   deploying php on paas- why & how
Midwest php 2013 deploying php on paas- why & howdotCloud
 
Hanami with a modern touch
Hanami with a modern touchHanami with a modern touch
Hanami with a modern touchCreditas
 
How to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJ
How to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJHow to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJ
How to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJJesus Manuel Olivas
 

What's hot (18)

Plone server
Plone serverPlone server
Plone server
 
Introduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCatsIntroduction to NodeJS with LOLCats
Introduction to NodeJS with LOLCats
 
ITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package ManagementITB2016 - ForgeBox 2 Package Management
ITB2016 - ForgeBox 2 Package Management
 
When dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniquesWhen dynamic becomes static : the next step in web caching techniques
When dynamic becomes static : the next step in web caching techniques
 
Push the web with HTML5
Push the web with HTML5Push the web with HTML5
Push the web with HTML5
 
Using multi-tenant WordPress to simplify development
Using multi-tenant WordPress to simplify developmentUsing multi-tenant WordPress to simplify development
Using multi-tenant WordPress to simplify development
 
IBM Connections Adminblast
IBM Connections AdminblastIBM Connections Adminblast
IBM Connections Adminblast
 
[In Control 2010] HTML5
[In Control 2010] HTML5[In Control 2010] HTML5
[In Control 2010] HTML5
 
How to build a realtime, WebSockets-enabled chat in less than 5 minutes
How to build a realtime, WebSockets-enabled chat in less than 5 minutesHow to build a realtime, WebSockets-enabled chat in less than 5 minutes
How to build a realtime, WebSockets-enabled chat in less than 5 minutes
 
PNWDS 2013- Restful development in Drupal 7/8
PNWDS 2013- Restful development in Drupal 7/8PNWDS 2013- Restful development in Drupal 7/8
PNWDS 2013- Restful development in Drupal 7/8
 
Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011
 
Ember and WebSockets
Ember and WebSocketsEmber and WebSockets
Ember and WebSockets
 
[2010]我有一个梦想
[2010]我有一个梦想[2010]我有一个梦想
[2010]我有一个梦想
 
Web performance optimization for modern web applications
Web performance optimization for modern web applicationsWeb performance optimization for modern web applications
Web performance optimization for modern web applications
 
Midwest php 2013 deploying php on paas- why & how
Midwest php 2013   deploying php on paas- why & howMidwest php 2013   deploying php on paas- why & how
Midwest php 2013 deploying php on paas- why & how
 
Hanami with a modern touch
Hanami with a modern touchHanami with a modern touch
Hanami with a modern touch
 
How to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJ
How to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJHow to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJ
How to keep Drupal relevant in the Git-based and API-driven CMS era DrupalCampNJ
 
The last mile from db to disk
The last mile from db to diskThe last mile from db to disk
The last mile from db to disk
 

Similar to Lightweight Approach to Building Web APIs with .NET

Nancy - A Lightweight .NET Web Framework
Nancy - A Lightweight .NET Web FrameworkNancy - A Lightweight .NET Web Framework
Nancy - A Lightweight .NET Web FrameworkChristian Horsdal
 
Couchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problemCouchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problemdelagoya
 
CouchDB : More Couch
CouchDB : More CouchCouchDB : More Couch
CouchDB : More Couchdelagoya
 
OSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDBOSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDBBradley Holt
 
The REST And Then Some
The REST And Then SomeThe REST And Then Some
The REST And Then SomeNordic APIs
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
 Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data... Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...Big Data Spain
 
Building rest services using aspnetwebapi
Building rest services using aspnetwebapiBuilding rest services using aspnetwebapi
Building rest services using aspnetwebapiBrij Mishra
 
Introduction to REST and Hypermedia
Introduction to REST and HypermediaIntroduction to REST and Hypermedia
Introduction to REST and HypermediaNordic APIs
 
So you think you know REST - DPC11
So you think you know REST - DPC11So you think you know REST - DPC11
So you think you know REST - DPC11Evert Pot
 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariJoseph Scott
 
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example Anna Klepacka
 
No REST for the Wicked: REST and Catalyst
No REST for the Wicked: REST and CatalystNo REST for the Wicked: REST and Catalyst
No REST for the Wicked: REST and CatalystJay Shirley
 
Cosmos, Big Data GE implementation in FIWARE
Cosmos, Big Data GE implementation in FIWARECosmos, Big Data GE implementation in FIWARE
Cosmos, Big Data GE implementation in FIWAREFernando Lopez Aguilar
 
Cosmos, Big Data GE Implementation
Cosmos, Big Data GE ImplementationCosmos, Big Data GE Implementation
Cosmos, Big Data GE ImplementationFIWARE
 
ITB2016 - Building ColdFusion RESTFul Services
ITB2016 - Building ColdFusion RESTFul ServicesITB2016 - Building ColdFusion RESTFul Services
ITB2016 - Building ColdFusion RESTFul ServicesOrtus Solutions, Corp
 

Similar to Lightweight Approach to Building Web APIs with .NET (20)

Nancy + rest mow2012
Nancy + rest   mow2012Nancy + rest   mow2012
Nancy + rest mow2012
 
Nancy - A Lightweight .NET Web Framework
Nancy - A Lightweight .NET Web FrameworkNancy - A Lightweight .NET Web Framework
Nancy - A Lightweight .NET Web Framework
 
Couchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problemCouchdb: No SQL? No driver? No problem
Couchdb: No SQL? No driver? No problem
 
Ws rest
Ws restWs rest
Ws rest
 
CouchDB : More Couch
CouchDB : More CouchCouchDB : More Couch
CouchDB : More Couch
 
OSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDBOSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDB
 
The REST And Then Some
The REST And Then SomeThe REST And Then Some
The REST And Then Some
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
 Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data... Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
Big Data Web applications for Interactive Hadoop by ENRICO BERTI at Big Data...
 
Building rest services using aspnetwebapi
Building rest services using aspnetwebapiBuilding rest services using aspnetwebapi
Building rest services using aspnetwebapi
 
Introduction to REST and Hypermedia
Introduction to REST and HypermediaIntroduction to REST and Hypermedia
Introduction to REST and Hypermedia
 
Talking to Web Services
Talking to Web ServicesTalking to Web Services
Talking to Web Services
 
So you think you know REST - DPC11
So you think you know REST - DPC11So you think you know REST - DPC11
So you think you know REST - DPC11
 
Site Performance - From Pinto to Ferrari
Site Performance - From Pinto to FerrariSite Performance - From Pinto to Ferrari
Site Performance - From Pinto to Ferrari
 
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
Workshop KrakYourNet2016 - Web applications hacking Ruby on Rails example
 
No REST for the Wicked: REST and Catalyst
No REST for the Wicked: REST and CatalystNo REST for the Wicked: REST and Catalyst
No REST for the Wicked: REST and Catalyst
 
News In Wcf40
News In Wcf40News In Wcf40
News In Wcf40
 
Cosmos, Big Data GE implementation in FIWARE
Cosmos, Big Data GE implementation in FIWARECosmos, Big Data GE implementation in FIWARE
Cosmos, Big Data GE implementation in FIWARE
 
Cosmos, Big Data GE Implementation
Cosmos, Big Data GE ImplementationCosmos, Big Data GE Implementation
Cosmos, Big Data GE Implementation
 
ITB2016 - Building ColdFusion RESTFul Services
ITB2016 - Building ColdFusion RESTFul ServicesITB2016 - Building ColdFusion RESTFul Services
ITB2016 - Building ColdFusion RESTFul Services
 

More from Christian Horsdal

Testing microservices.ANUG.20230111.pptx
Testing microservices.ANUG.20230111.pptxTesting microservices.ANUG.20230111.pptx
Testing microservices.ANUG.20230111.pptxChristian Horsdal
 
Scoping microservices.20190917
Scoping microservices.20190917Scoping microservices.20190917
Scoping microservices.20190917Christian Horsdal
 
Event sourcing anug 20190227
Event sourcing anug 20190227Event sourcing anug 20190227
Event sourcing anug 20190227Christian Horsdal
 
Consolidating services with middleware - NDC London 2017
Consolidating services with middleware - NDC London 2017Consolidating services with middleware - NDC London 2017
Consolidating services with middleware - NDC London 2017Christian Horsdal
 
Middleware webnextconf - 20152609
Middleware   webnextconf - 20152609Middleware   webnextconf - 20152609
Middleware webnextconf - 20152609Christian Horsdal
 
Three Other Web Frameworks. All .NET. All OSS. One Hour. Go
Three Other Web Frameworks. All .NET. All OSS. One Hour. GoThree Other Web Frameworks. All .NET. All OSS. One Hour. Go
Three Other Web Frameworks. All .NET. All OSS. One Hour. GoChristian Horsdal
 
Four .NET Web Frameworks in Less Than an Hour
Four .NET Web Frameworks in Less Than an HourFour .NET Web Frameworks in Less Than an Hour
Four .NET Web Frameworks in Less Than an HourChristian Horsdal
 
DCI ANUG - 24th November 2010
DCI ANUG - 24th November 2010DCI ANUG - 24th November 2010
DCI ANUG - 24th November 2010Christian Horsdal
 
DCI - ANUG 24th November 2010
DCI - ANUG 24th November 2010DCI - ANUG 24th November 2010
DCI - ANUG 24th November 2010Christian Horsdal
 

More from Christian Horsdal (12)

Testing microservices.ANUG.20230111.pptx
Testing microservices.ANUG.20230111.pptxTesting microservices.ANUG.20230111.pptx
Testing microservices.ANUG.20230111.pptx
 
Scoping microservices.20190917
Scoping microservices.20190917Scoping microservices.20190917
Scoping microservices.20190917
 
Event sourcing anug 20190227
Event sourcing anug 20190227Event sourcing anug 20190227
Event sourcing anug 20190227
 
Consolidating services with middleware - NDC London 2017
Consolidating services with middleware - NDC London 2017Consolidating services with middleware - NDC London 2017
Consolidating services with middleware - NDC London 2017
 
Intro to.net core 20170111
Intro to.net core   20170111Intro to.net core   20170111
Intro to.net core 20170111
 
Middleware webnextconf - 20152609
Middleware   webnextconf - 20152609Middleware   webnextconf - 20152609
Middleware webnextconf - 20152609
 
Campus days 2014 owin
Campus days 2014 owinCampus days 2014 owin
Campus days 2014 owin
 
ASP.NET vNext ANUG 20140817
ASP.NET vNext ANUG 20140817ASP.NET vNext ANUG 20140817
ASP.NET vNext ANUG 20140817
 
Three Other Web Frameworks. All .NET. All OSS. One Hour. Go
Three Other Web Frameworks. All .NET. All OSS. One Hour. GoThree Other Web Frameworks. All .NET. All OSS. One Hour. Go
Three Other Web Frameworks. All .NET. All OSS. One Hour. Go
 
Four .NET Web Frameworks in Less Than an Hour
Four .NET Web Frameworks in Less Than an HourFour .NET Web Frameworks in Less Than an Hour
Four .NET Web Frameworks in Less Than an Hour
 
DCI ANUG - 24th November 2010
DCI ANUG - 24th November 2010DCI ANUG - 24th November 2010
DCI ANUG - 24th November 2010
 
DCI - ANUG 24th November 2010
DCI - ANUG 24th November 2010DCI - ANUG 24th November 2010
DCI - ANUG 24th November 2010
 

Lightweight Approach to Building Web APIs with .NET

  • 1. The Lightweight Approach to Building Web Based APIs with .NET Christian Horsdal Independent Consultant @chr_horsdal http://horsdal.blogspot.com
  • 2. Agenda Who Am I? What is “lightweight” RestBucks REST Nancy
  • 3. 3 Who Am I? Independent consultant Husband and Father Some who enjoys Clean code TDD’ing When my soccer team wins Simplicity Whisky
  • 5. 5 What is lightweight? Low ceremony Low cruft Conventions
  • 10. 10 Richardsons Maturity Model Level 3: Hypermedia Level 2: HTTP Verbs Level 1: Resources Level 0: POX-RPC
  • 11. 11 REST - Resources The basic building blocks of a web API Anything with a URI http://restbucks.com/menu/ http://restbucks.com/orders/ http://restbucks.com/order/42/ http://restbucks.com/order/42/payment/
  • 12. 12 REST - Representations GET http://restbucks.com/order/19202048/ HTTP/1.1 Accept: application/vnd.restbucks+xml <?xml version="1.0"?> <order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="h <links> <link uri="http://restbucks.com/order/19202048" rel="http://restbucks <link uri="http://restbucks.com/order/19202048" rel="http://restbucks <link uri="http://restbucks.com/order/19202048" rel="http://restbucks <link uri="http://restbucks.com/order/19202048/payment" rel="http://r </links> <location>inShop</location> <cost>7.60000</cost> <items> <item> <name>Latte</name> <quantity>1</quantity> <milk>skim</milk>
  • 13. 13 REST - Representations GET http://restbucks.com/order/19202048/ HTTP/1.1 Accept: application/vnd.restbucks+json { "Location":inShop, "Cost":7.60000, "Items":[ { "Name":"Latte", "Quantity":1, "Preferences":{ "milk":"skim", "size":"large" } } ], "Status":1, "Links":[
  • 15. 15
  • 16. 16 Why Nancy? “Close” to http Very, very readable code Very explicit routing Automatic content negotiation Embraces modularity Embraces IoC/DI Embraces testing Runs anywhere
  • 17. Nancy Basics public class MainModule : NancyModule { public MainModule() { Get["/"] = _ => "Hello from root"; } } public class SubModule : NancyModule { public SubModule() : base("subpath") { Get["/"] = _ => "Hello from subpath"; } }
  • 18. Nancy Basics Defines which verbs you accepts public class MainModule : NancyModule { public MainModule() { Get["/"] = _ => "Hello from root"; Post["/"] = _ => DoPost(Request.Form.my_value); Delete["/{id}"] = p => Delete(p.id); Put["/"] = _ => DoPut(Request.Body); Patch["/"] = _ => DoPatch(Request.Body); } } HEAD and OPTIONS and automatic
  • 19. Restbuck on Nancy 19 Place an Order
  • 20. RestBucks on Nancy 20 View/Cancel/Update
  • 21. RestBucks on Nancy 21 Pay an Order
  • 22. RestBucks on Nancy 22 XML, JSON or YAML
  • 23. RestBucks on Nancy 23 Conditional Gets
  • 24. 26 Nancy.Testing Test through the whole Nancy pipeline Take advantage of IoC/DI …Or not
  • 25. 27 Why Nancy? “Close” to http Very, very readable code Very explicit routing Automatic content negotiation Embraces modularity Embraces IoC/DI Embraces testing Runs anywhere
  • 26. 28 Why REST + Nancy Lightweight Low ceremony Low cruft Follows conventions Open Agile
  • 27. 29 More … RestBucks on Nancy: http://github.com/horsdal/Restbucks-on-Nancy Rest in Practice: http://restinpractice.com/book.html Nancy: www.nancyfx.org Me: Twitter: @chr_horsdal Blog: horsdal.blogspot.com Email: c.horsdal@gmail.com

Editor's Notes

  1. Basics
  2. Basics
  3. Conneq
  4. Brug WhenOrderHasNotChanged_ThenReturn304()