asp.net web api를활용한download.microsoft.com/download/b/8/3/b837a8dd-b4… ·  ·...

41
ASP.NET Web API를 활용한 RESTful 서비스 개발 - 대학내일 한상훈 매니저 2014년 1월 새해 명품 특강! ASP.NET, 서비스 플랫폼으로 날다!

Upload: vohanh

Post on 06-Apr-2018

228 views

Category:

Documents


2 download

TRANSCRIPT

ASP.NET Web API를 활용한RESTful 서비스 개발- 대학내일 한상훈 매니저

2014년 1월 새해 명품 특강!

ASP.NET, 서비스 플랫폼으로 날다!

세션 소개

.NET Framework 기반의 Web API 프레임워크인 ASP.NET Web API를

살펴보고, 이를 활용하여 보다 쉽고 빠르게 다양한 유형의 클라이언트에서

활용이 가능한 RESTful 서비스 개발 방법을 파헤쳐 보겠습니다.

ASP.NET Web API의 기본적인 개념에서 구현에 이르기까지 실제 구동되는

데모를 중심으로 살펴봅니다.

먼저, Web API는 무엇인가?

Web API는 무엇인가?

왜 Web API를 사용해야 하는가?

플랫폼 환경의 제한이 없는 서비스

WEB DESKTOP

Web API

클라이언트 환경의 제한이 없는 서비스

Web API

Web API의 대명사 REST

• REST : REpresentational State Transfer

70

21

52

0

10

20

30

40

50

60

70

80

점유율 (ProgrammableWeb, Jan 9, 2014)

REST SOAP Javascript XML-RPC

RESTful 서비스

동작 설명 SQL HTTP 기존 방식 RESTful API

Create 생성 INSERT POST POST, /Write.aspx?name=contact POST, /Contact

Read 읽기 SELECT GET GET, /List.aspx?name=contact&id=1 GET, /Contact/1

Update 갱신 UPDATE PUT POST, /Edit.aspx?name=contact&id=1 PUT, /Contact/1

Delete 삭제 DELETE DELETE GET, /Delete.aspx?name=contact&id=1 DELETE, /Contact/1

RESTful 서비스기존 방식의 웹 접근과 RESTful API와의 요청 URI 차이

그래서, ASP.NET Web API!!

One ASP.NET (ASP.NET Web Stack)

ASP.NET Web API 계보

MVC Framework + WCF Web API

• ASP.NET Routing

• Model binding

• Validation

• Filters• Link generation

• Testability

• IoC integration

• VS template

• Scaffolding

ASP.NET MVC

• Modern HTTP programming model

• HttpClient

• Task-based async

• Formatting, content negotiation

• Server-side query composition

• Create custom help pages

• Self-host

• Tracing

WCF Web API

ASP.NET Web API 특징

• HTTP 기반의 프로그래밍 모델 지원

• 간단하고 쉽게 HTTP 리소스 생성 가능

• HTTP 내용 협상(content negotiation)

• 공통 관심사(cross cutting concerns)의 분리

• 도움말 페이지(help page) 생성

• 유연한 호스팅(hosting)

• 이식 가능한 Web API 클라이언트

• Web API 보안 (CORS, OAuth 2.0, Authn Filter)

• 가볍고, 테스트 가능하고, 확장이 가능함

ASP.NET Web API 구현하기 #1

ASP.NET Web API 구현

• ApiController를 상속받는 컨트롤러 생성

• 각각의 액션메소드 구현

– 액션메소드의 접두사가 HTTP 메소드와 서로 매핑

• GetComment -> HTTP GET 메소드

• PostComment -> HTTP POST 메소드

public class ValuesController : ApiController{

// GET api/valuespublic IEnumerable<string> GetComment(){

return new string[] { "value", "value" };}

라우팅 (Routing)config.Routes.MapHttpRoute(

name: "DefaultApi",

routeTemplate: "api/{controller}/{id}",

defaults: new { id = RouteParameter.Optional }

);

public IEnumerable<TodoItem> GetTodos() { … }

라우팅 (Routing)

• ApiController와 URI가 서로 매핑

– {controller} + “Controller” = ApiController 클래스명

– HTTP 메서드를 직접 적용

• [HttpGet / Post / Put / Delete]

– HTTP 메소드를 중복 적용

• [AcceptVerbs(“GET”, “HEAD”)]

– 액션 이름 라우팅

• [ActionName(“Thumbnail”)]

– 비-액션(Non-Actions) 처리

• [NonAction]

• 간단한 매개 변수는 URI를 통해서 바로 전달

– 라우트 데이터(Route data), 쿼리 파라미터(Query parameters)

• 복합 형식(Complex Type)은 HTTP Body를 통해서 전달

– MediaTypeFormatter를 사용하여 Content-Type 기반으로 개체화 가능

– JSON, XML, Form 데이터는 기본으로 제공

• 사용자 정의 매개변수 바인딩(Custom parameter binding)

– [FromUrl], [FromBody], [ModelBinder] 등을 사용하여 재정의

액션 파라미터 (Action Parameter)

• 모든 요청(Request)에서 유효성 검사 실행

• 유효성 검사 오류는 ModelState 개체에 축적

– ModelState.IsValue로 체크

• DataAnnotation 또는 사용자 정의 유효성 검사 로직 사용

유효성 검사 (Validation)

• 응답 형식(Format)은 HTTP 내용 협상에 기초하여 결정

– [Accept] 헤더에 원하는 형식을 표현

• 서버의 응답 형식을 결정하는 요소

– 요청(Request)

– 액션메서드의 반환 형식

– MediaTypeFormatter 구성

• JSON과 XML 기본 제공

내용 협상 (Content Negotiation)

• Web API를 제공할 때, API 사용법을 설명하는 도움말 페이지 제공

– ApiExplorer 클래스를 기반으로 동작

– Areas/HelpPages/ 하위 폴더 구성

• API 문서 추가 : ~/App_Data/XmlDocument.xml

API 도움말(Help) 페이지

ASP.NET Web API 구현하기 #2

• 중앙 집중식의 단점을 보완하고 직관적인 라우팅 설정

– 보다 유연하고 명확한 라우팅

• 어트리뷰트 라우팅 활성

– App_Start / WebApiConfig.cs

• 어트리뷰트 라우팅 적용

어트리뷰트 라우팅 (Attribute routing)

// Web API routesconfig.MapHttpAttributeRoutes();

[Route("api/store/books/{bookid}")]public Book GetBookByBookId(int bookid) { … }

어트리뷰트 라우팅 (Attribute routing)

[Route("api/info/books/{bookid:int}")]public Book GetInfoByBookId(int bookid)

[Route("api/info/books/{bookid:alpha}")]public Book GetInfoByBookId(string bookid)

[Route("api/info/books/{bookid:int?}")]public Book GetInfoByBookId(int bookid = 1) { … }

[Route("api/info/books/{bookid:int=1}")]public Book GetInfoByBookId(int bookid) { … }

제약사항

옵션값 및 기본값

http://attributerouting.net

• 웹에서 데이터 제어가 가능하게 하는 데이터 액세스 프로토콜

– 웹을 통해 데이터 소스에 대한 표준 CRUD 액세스를 제공

• Nuget 패키지 추가

– Microsoft.AspNet.WebApi.OData

• [Queryable], IQueryable<T>

• $top, $skip, $orderby, $filter, $select, $expand, $batch …

OData(Open Data Protocol) 지원

// OData 활성화[Queryable]public IQueryable<Product> GetProduct(…)

• .NET 웹 서버와 웹 응용프로그램 사이의 표준 인터페이스를 정의

– 웹 응용프로그램을 서버와 분리

– IIS가 아닌 별도의 프로세스에서 웹 응용프로그램을 자체-호스트(Self-Host)

• Nuget 패키지 추가

– Microsoft.AspNet.WebApi.OwinSelfHost

• Microsoft.Owin.Host.HttpListener

– OWIN 응용 프로그램을 자체 호스트하기 위한 HTTP 서버 제공

OWIN(Open Web Interface for .NET) 통합

string baseAddress = "http://localhost:9000/";

// Start OWIN host using (WebApp.Start<Startup>(url: baseAddress))

• 처리되지 않은 대부분의 예외는 HTTP 상태 코드 500 응답

• 예외 처리 기법

– HttpResponseException

• HttpResponseException 형식은 별개로 취급 (HTTP 응답 반환을 위해 설계됨)

• 생성자에 지정한 HTTP 상태 코드를 반환

– Exception Filter

• HttpResponseException 형식을 제외한 모든 유형의 처리되지 않은 예외에 대응

• 액션메소드 등록, 컨트롤러 등록, 전역 등록

– HttpError

• 응답 본문에 오류 정보를 반환할 수 있는 일관된 방법 제공

• 강력한 형식의 모델과 동일하게 내용 협상 및 직렬화 처리 수행

오류 및 예외 처리

• Global Error Handling

• Attribute Routing Improvements

• Help Page Improvements

• IgnoreRoute Support

• BSON Media-Type Formatter

• Better Support for Async Filters

• Query Parsing for the Client Formatting Library

• Various bug fixes

ASP.NET Web API 2.1

Summary

RESTful 서비스의 가장 이상적인 플랫폼

ASP.NET Web API

• ASP.NET Web API 공식 웹사이트

– http://www.asp.net/web-api

• What's New in ASP.NET Web API 2.1

– http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21

• Taeyo.NET ASP.NET Web API 번역 아티클

– http://www.taeyo.net/Columns/View.aspx?SEQ=464&PSEQ=35

• Egocube.pe.kr ASP.NET Web API 번역 아티클

– http://www.egocube.pe.kr/Translation/Index/asp-net-web-api

• Scott hanselman Blog

– http://www.hanselman.com/

• Build RESTful API's with ASP.NET Web API

– http://www.asp.net/web-api/tutorials/hands-on-labs/build-restful-apis-with-aspnet-web-api

• Introduction to ASP.NET Web API

– http://www.codeproject.com/Articles/549152/Introduction-to-ASP-NET-Web-API

• ASP.NET Web API 2.0 and the new OData keywords

– http://www.devcurry.com/2013/07/aspnet-web-api-20-and-new-odata-keywords.html#.Ukm2Hyuwf4a

• 닷넷코리아 온라인 세미나 1회

– http://www.dotnetkorea.com/DotNetNote/BoardList.aspx?BoardName=Seminar

참고자료