2013-07-03 84 views
2

響應我使用gorilla web toolkit創建一個簡單的RPC API調查。我使用的是從他們的文檔的例子,我測試使用Advanced Rest Client在Chrome和使用沒有從大猩猩/ RPC JSON RPC服務

http://localhost:1111/api/ 

和POST以下RAW JSON有效載荷:

{"method":"HelloService.Say","params":[{"Who":"Test"}]} 

這到達服務器,我知道這當我記錄它時(見下面的代碼),我得到了200 OK響應。但是我得到「響應不包含任何數據」

我期待的是在下面的說法定義的JSON回覆消息。有沒有人對這個問題有什麼建議?

package main 

import (
    "gorilla/mux" 
    "gorilla/rpc" 
    "gorilla/rpc/json" 
    "log" 
    "net/http" 
) 

type HelloArgs struct { 
    Who string 
} 

type HelloReply struct { 
    Message string 
} 

type HelloService struct{} 

func (h *HelloService) Say(r *http.Request, args *HelloArgs, reply *HelloReply) error { 
    log.Printf(args.Who) 
    reply.Message = "Hello, " + args.Who + "!" 
    log.Printf(reply.Message) 
    return nil 
} 

func main() { 
    r := mux.NewRouter()  
    jsonRPC := rpc.NewServer() 
    jsonCodec := json.NewCodec() 
    jsonRPC.RegisterCodec(jsonCodec, "application/json") 
    jsonRPC.RegisterCodec(jsonCodec, "application/json; charset=UTF-8") // For firefox 11 and other browsers which append the charset=UTF-8 
    jsonRPC.RegisterService(new(HelloService), "") 
    r.Handle("/api/", jsonRPC) 
    http.ListenAndServe(":1111", r) 
} 
+1

1.縮進你的代碼 2.檢查返回的錯誤 3.嘗試再次 – thwd

+0

你有沒有得到這個工作? – rem7

回答

5

這是因爲大猩猩/ RPC/JSON實現JSON-RPC,這需要在該請求三個參數:方法PARAMSID

在JSON-RPC中沒有ID的請求被稱爲通知並且沒有響應。

檢查​​瞭解更多詳情。

所以,你的情況,你需要使用下面的JSON:

{"method":"HelloService.Say","params":[{"Who":"Test"}], "id":"1"} 
+0

即使我們錯過的ID,我們將得到200 OK,但在體內無JSON。感謝您的回答。 :) –