2011-09-28 7 views
21

私は、ASP.NET MVC3を使用して開発したWebサイトを持っています。
他のユーザーがウェブサイトと同じ機能を公開するREST APIを公開したいと考えています。既存のMVCベースのWebサイトのREST APIを作成する

ウェブサイトでは、ユーザーがログインしてDBに対して有効性が確認されると、セッションはユーザーのログイン状態を管理します。
公開されているメソッドの多くにユーザーがログインする必要がある(または少なくとも有効なユーザー名とパスワードを持つ)REST APIと同等の処理を行うにはどうすればよいですか。

さらに、ウェブサイトの最善のアプローチは、REST APIを使用することです(APIはサイトで必要なすべての機能をカバーしていると仮定します)。

このフレームワークを使用してサイトが既に存在していることを考慮して、ASP.NET MVC3はこれに適していますか?

答えて

9

私はどのように[ASP.NET MVC 3アプリケーション内でRESTfulなAPIアーキテクチャをビルド]年前にブログ記事 を書いて、サイトが行くようになってしまいました。あなたのMVCアプリケーションにRESTのAPIの構築に取りたい場合:( それは良いスタートかもしれません。

良い解決策のためのWebAPIのを使用して@tugberkによってanswerを参照してください。

+0

はい、これは、この件について話しているウェブ上で最も優れた記事の1つです。数日前にチェックしました。 –

+2

リンクがダウンしていると思います。 –

+0

それはアクセスできない場合、ウェブ上で最高の記事であることはあまりありません:( –

4

注:

WCFのWeb APIは現在、ASP.NETのWeb APIで、多くのことを変更しました。ベータ版 が利用可能になりました。詳細については、Getting Started With ASP.NET Web API - Tutorials, Videos, Samples

私はWCF Web Apiでこれを行うことになります。 ASP.NET MVCも優れていて、データを公開することができますが、WCF Web APIは、ユーザーにデータを公開することを検討する場合、より優れた機能を備えています。 REST Web APIを使用してシステムに統合するのは簡単です。

認証の場合、このタイプのシナリオでは常にAPIキーが最適です。ここでは、WCFのWeb APIとAPI認証を実装する方法の良い例です。

http://weblogs.asp.net/cibrax/archive/2011/04/15/http-message-channels-in-wcf-web-apis-preview-4.aspx

注:

彼らはわずか数週間の5カップルの前にプレビュー版をリリースし、 メッセージ私は が知っている限り、チャンネルはメッセージハンドラに変更されました。しかし、上記の記事はあなたにアイディアを与えるべきです。

セキュリティ実装の場合は、以下のようにも役立つかもしれない:

wcf Authentication Token Implementation - How to do

+0

[sameproblemmorecode] (http://sameproblemmorecode.blogspot.com/2011/10/creating-secure-restfull-wcf-service.html) – Luuk

1

ASP .NET MVCは、このための素晴らしい選択肢です:

も私の他の回答を参照してください。 WebサイトだけでなくRESTfulなサービスとしても機能する複数のASP MVCを作成しました。

私が使用する設計パラダイムを要約すると、各コントローラには、要求されたデータのJSON表現を発行するアクションがあります。このデータはサーバー上のビューモデルにロードされ、JSONシリアライザはサーバー側を処理し、jQueryビューは実際のWebページが消費するデータをうまく読み込みます。

サイト自体には、コントローラには必要なマークアップを発行するインデックスアクションがありますが、データは表示されません。ページ上のjQuery document.readyメソッドは、基本的に私の残りのAPIであるデータからデータを読み込みますが、サイトに直接組み込みます。

チェックアウト素晴らしいサンプルコードのためのNerdディナー。 http://nerddinner.com/

セキュリティに関しては、私の経験はあなたと異なると思います。 ASP MVCは、ユーザーがすべて同じドメインにあり、AD資格を持っている場合、Active Directoryと非常にうまく統合されます。これは、私が使用した唯一の方法であり、容易さ、成功、そして満足です。

私は同僚に、authorizeメソッドを呼び出したときにトークンを渡す他のAPIとやり取りしました。受け取ったトークンは、クライアントが各リクエストを保存して返す責任となりますが、実装の詳細を話すことはできません。

+0

データの読み込みがより明示されている必要があります。私はあなたの文書onreadyがjquery.getJSONメソッドを呼び出してJSONデータを提供するコントローラメソッドに要求を送り出すことを提案します。副次的な利点は、後でAJAXデータを返す高速ページロードです。 – Evan

1

私は行くだろうWCFのWebサービスベースの実装は次のよう。

  • ラップあたりの非反復可能なトークンを生成する認証Webサービスを作成します。例
  • ためyourproject.businessservicesという名前の別々のDLLプロジェクトへのすべてのビジネス・ロジックユーザログイン
  • のは、時間を言わせて、ユーザがキャッシュをアクセスしていない場合は、スライド満了
  • を持っている必要がありmemcacheのようなキャッシュ内のトークンと一緒にこのログインは、店舗利用者の基本的な詳細は、キャッシュの有効期限が切れると、ユーザーはログアウトされます
  • ユーザーがキャッシュを使用している場合、キャッシュは引き続き拡張されます。 WCFサービス側で

  • 検証する必要があり、このセッションIDを持っています

  • すべてのWCFのメソッド認証

    にトークンを返すためにAPIを作成

    利点があることですwcfメソッドはxmlまたはjson形式を返すように公開でき、通常のWebサービスとしても使用できます。

    [WebInvoke(METHOD = "GET"、ResponseFormat = WebMessageFormat.Xml、bodyStyle属性= WebMessageBodyStyle.Bare、UriTemplate = "/ MyModuleという/ XML/GetDataの/ {customerSessionId}")] [WebInvoke(METHOD = "GET" 、ResponseFormat = WebMessageFormat.Json、BodyStyle = WebMessageBodyStyle。包まれた、UriTemplate = "/ MyModuleという/ JSON/GetDataの/ {customerSessionId}")]

あなたはまた、私は基本認証を参照jQueryを使って作業してWCFを得ることができた方法に私のブログで見ることができ
関連する問題