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"を指定しないと駄目みたいです。
この謎仕様なのかワシのプログラムなのかは良くワカランです。