草庐IT

json - API 请求和响应

coder 2024-07-13 原文

我想知道 HTTP 客户端是否可以在 Go 中使用不同的 JSON 对象发布特定的 JSON 对象和服务器响应。例如,客户端发送 JSON 对象

请求正文

{
  "nfNssaiAvailabilityUri": "string",
  "taiList": [
    {
      "plmnId": {
        "mcc": "string",
        "mnc": "string"
      },
      "tac": "string"
    }
  ],
  "expiry": "2019-04-01T10:41:54.344Z"
}

响应主体为

{
  "subscriptionId": "string",
  "expiry": "2019-04-01T10:41:54.363Z",
  "authorizedNssaiAvailabilityData": [
    {
      "tai": {
        "plmnId": {
          "mcc": "string",
          "mnc": "string"
        },
        "tac": "string"
      },
      "supportedSnssaiList": [
        {
          "sst": 0,
          "sd": "string"
        }
      ],
      "restrictedSnssaiList": [
        {
          "homePlmnId": {
            "mcc": "string",
            "mnc": "string"
          },
          "sNssaiList": [
            {
              "sst": 0,
              "sd": "string"
            }
          ]
        }
      ]
    }
  ]
}

如您所见,请求正文 JSON 与响应不同。我有两个 JSON 的结构,目前我只能使用请求正文 POST 并接收与响应相同的正文。我期望的是能够获得上述响应中指示的 JSON 对象。

我有:

type NssfEventSubscriptionCreateData struct {
    NfNssaiAvailabilityUri string `json:"nfNssaiAvailabilityUri"`
    TaiList []Tai `json:"taiList,omitempty"`
        ...
}
type NssfEventSubscriptionCreatedData struct {
    SubscriptionId string `json:"subscriptionId"`
    Expiry time.Time `json:"expiry,omitempty"`
        ....
}
func (m *SliceDataAccess) InsertNssaiSubscriptionInfo(subdata NssfEventSubscriptionCreateData) error {
    err := db.C(COLLECTION).Insert(subdata)
    if err != nil {
        return err
    }
    return nil
}
func NSSAIAvailabilityPost(w http.ResponseWriter, r *http.Request) {
    if r.Header.Get("Accept") != "application/json" {
        WriteError(w, ErrNotAcceptable)
        return
    }
    if r.Method == "POST" {

        var reqsubData NssfEventSubscriptionCreateData
        err := json.NewDecoder(r.Body).Decode(&reqsubData)
        if err != nil {
            respondWithError(w, http.StatusBadRequest, "Object body not well decoded")
            return
        }
        //reqsubData.ID = bson.NewObjectId()
        if err := da.InsertNssaiSubscriptionInfo(reqsubData); err != nil {
            respondWithError(w, http.StatusInternalServerError, err.Error())
        } else {
            scheme := "http"
            if r.URL.Scheme != "" {
                scheme = r.URL.Scheme
            }
            w.Header().Set("Location", scheme+"://"+r.Host+r.URL.Path)
            w.Header().Set("Response-Code", "201")
            w.Header().Set("Response-Desc", "Success")
            respondWithJson(w, http.StatusCreated, reqsubData)
        }

    }
}

NSSAIAvailabilityPost 函数以 NssfEventSubscriptionCreateData 结构类型 JSON 对象响应,但我希望能够以 NssfEventSubscriptionCreatedData 结构类型 JSON 对象响应.

最佳答案

创建一个 NssfEventSubscriptionCreatedData 类型的结构,初始化它的值并在 respondWithJSON 中返回。

respData : = NssfEventSubscriptionCreatedData{}
// init fields

 respondWithJson(w, http.StatusCreated, respData)

关于json - API 请求和响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454591/

有关json - API 请求和响应的更多相关文章

  1. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  2. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  3. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  4. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. ruby-on-rails - Mandrill API 模板 - 2

    我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h

  7. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  8. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  9. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  10. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

随机推荐