GoRest は、少し思いだそうかな編
このかっこ悪いエラーは・・・・
./app.go:55: cannot use SimpleAuthorizer (type func(string, string, *http.Request) (bool, bool, gorest.SessionData)) as type gorest.Authorizer in argument to gorest.RegisterRealmAuthorizer
code.google.com/p/gorest/sec.go
//Signiture of functions to be used as Authorizers type Authorizer func(string,string)(bool,bool,SessionData) //Registers an Authorizer for the specified realm. func RegisterRealmAuthorizer(realm string,auth Authorizer){ if authorizers ==nil{ authorizers = make(map[string]Authorizer,0) } if _,found := authorizers[realm]; !found{ authorizers[realm] = auth } }
となり、第三引数の*http.Requestが、定義されていないと言うこと見たいです。
ちなみに、第三引数を消すと、実行できます。
が、その場合、xsftokenとroleによる認証(ワシは知らん)となり、Basic認証は此の方法ではできません。
なので、丸一日潰したけど、ちょっとアレな結果で、この方法でのBasic認証は、駄目と言うことになりそうです。
しかし、Basic認証自体は、
func (serv HelloService) HelloWorld() string { fmt.Println(checkAuth(serv.Context.Request())) return "Hello World" }
と*http.RequestをRestServiceから取り出すことで実現できました。(追記参照 Basic認証は正確には出来ていない)
さて、Revel と GoRest、どちらが賢い選択なんでしょうかね。
スケーラビリティは、どちらともセッションとは、おさらばしているので問題無いとして、パフォーマンスはどうなんでしょうかね。
実装は、GoRestの方が、ファイルがあちこち散らばらないで楽ですけど、DBが絡むと果たしてどうなることやら。
当然RESTFULなURLを実装したいならGoRest。
DBトランザクションとかAOPライクにしたいならRevel。
一長一短というよりは、ドングリの背比べですかね、WEBサービスに限ると。。。
追記
Basic認証のHeader"Authorization"を読み込んでくれてません。
poster側で"Authorization"を指定しないと駄目みたいです。
この謎仕様なのかワシのプログラムなのかは良くワカランです。