【问题标题】:http request delete and puthttp请求删除并放置
【发布时间】:2018-09-15 23:03:24
【问题描述】:

下面是我获取和发布的 HTTP 请求代码。我想知道的是如何为删除和放置做 HTTP 请求。我使 get 和 post 工作成为可能。我想知道如何根据下面的代码删除和放置。当我想将其更改为删除时,我的邮政编码要更改什么?缺少什么?我想用 ID 删除 例如“id”:16,

let parameters = ["name": "test", "desc": "test" , "reward":"1.00" , "sched":"2018-04-05T11:49:51+08:00",  "occurrence":["name": "once"]
    , "status": "created",  "created_by": "test@gmail.com","created_for": "test.com"] as [String : Any]

guard let url = URL(string: "http://test.tesst.eu:8000/api/v1/test/") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
request.httpBody = httpBody

let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
    if let response = response {
        print(response)
    }

    if let data = data {
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: [])
            print(json)
        } catch {
            print(error)
        }
    }
}.resume()

得到

guard let url = URL(string: "http://test.test:8000/api/v1/test") else { return }

let session = URLSession.shared
session.dataTask(with: url) { (data, response, error) in
    if let response = response {
        print(response)
    }

    if let data = data {
        print(data)
        do {
            let json = try JSONSerialization.jsonObject(with: data, options: [])
            print(json)
        } catch {
            print(error)
        }
    }
}.resume()

【问题讨论】:

  • 你可以用request. httpMethod = "get/post/delete...."在URLRequest中设置你的方法

标签: ios swift httprequest


【解决方案1】:

唯一不同的是 GET 参数在 url 本身,POST & DELETE & PUT 工作方式相同,只需更改httpMethod参数并指定httpBody,如果你愿意,意思是

DELETE : 表示从特定 url 删除资源

PUT : 将资源放入网络服务器

//

let parameters = ["ID": "16"] as [String : Any]
guard let url = URL(string: "http://test.tesst.eu:8000/api/v1/test/") else { return }
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject:parameters, options: []) else { return }
request.httpBody = httpBody  

【讨论】:

  • 我想删除 ID 为“id”的数据怎么样:16,?
  • 在 httpBody 中像 post 一样发送该项目的 id
  • 参数是什么?你能根据我上面的代码给我看一些例子吗?
【解决方案2】:

您应该了解每种方法类型之间的差异。它将帮助您,您应该做什么以及何时做。


将实体存储在 URI 中。 PUT 可以创建新实体或更新现有实体。 PUT 请求是幂等的。幂等性是 PUT 与 POST 请求的期望之间的主要区别。

PUT 方法请求将封闭的实体存储在提供的 Request-URI 下。如果 Request-URI 引用一个已经存在的资源,封闭的实体应该被认为是在源服务器上的一个修改版本。如果 Request-URI 不指向现有资源,并且该 URI 能够被请求用户代理定义为新资源,则源服务器可以使用该 URI 创建资源。如果创建了新资源,源服务器必须通过 201 (Created) 响应通知用户代理。如果修改了现有资源,则应发送 200(OK)或 204(No Content)响应代码以指示请求成功完成。如果无法使用 Request-URI 创建或修改资源,则应给出反映问题性质的适当错误响应。实体的接收者不得忽略任何它不理解或不实施的 Content-*(例如 Content-Range)标头,并且在这种情况下必须返回 501(未实施)响应。

修改ID为1的地址:

PUT /地址/1
注意:PUT 替换现有实体。如果只提供数据元素的一个子集,其余的将被替换为空或 null。

urlRequestInstance.httpMethod = "PUT"

删除

请求删除资源;但是,不必立即删除该资源。它可能是一个异步或长时间运行的请求。

DELETE 方法请求源服务器删除由 Request-URI 标识的资源。此方法可能会被源服务器上的人工干预(或其他方式)覆盖。即使从源服务器返回的状态码表明操作已经成功完成,客户端也不能保证操作已经执行。但是,服务器不应指示成功,除非在给出响应时它打算删除资源或将其移动到无法访问的位置。

如果响应包含描述状态的实体,则成功的响应应该是 200(OK),如果尚未执行该操作,则应为 202(已接受),或者如果该操作已执行但响应为 204(无内容)不包括实体。

删除一个ID为1的地址:

删除 /addresses/1

urlRequestInstance.httpMethod = "DELETE"

这里有很好的教程参考:

现在您可以尝试由 Sh_Khan 回答的示例代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多