This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/master by this push:
new 02a78fede7b Add a proposal for Triple support for Multiple
Content-Type (#2868)
02a78fede7b is described below
commit 02a78fede7bb8394308d203c1d58742a0671c54e
Author: namelessssssssssss
<[email protected]>
AuthorDate: Wed Nov 22 14:47:08 2023 +0800
Add a proposal for Triple support for Multiple Content-Type (#2868)
---
.../blog/proposals/support-more-content-types.md | 157 +++++++++++++++++++
.../proposals/support-more-content-types.md | 172 +++++++++++++++++++++
2 files changed, 329 insertions(+)
diff --git a/content/en/blog/proposals/support-more-content-types.md
b/content/en/blog/proposals/support-more-content-types.md
new file mode 100644
index 00000000000..e92055adb40
--- /dev/null
+++ b/content/en/blog/proposals/support-more-content-types.md
@@ -0,0 +1,157 @@
+---
+title: "Enhanced HTTP Standard Capabilities of Triple Protocol"
+description: >
+ Enhanced HTTP Standard Capabilities of Triple Protocol - Support for
Multiple Content-Type
+---
+## Enhanced HTTP Standard Capabilities of Triple Protocol - Support for
Multiple Content-Type
+
+> This article focuses on how Triple supports more of the HTTP standard
Content-Type and how the service receives these requests.
+#### **Overview**
+
+Triple currently supports two serialization methods: Json and protobuf,
corresponding to the ContentTypes:
+
+* application/json
+* application/grpc+proto
+
+This poses no issue when both the consumer and provider are backend services.
However, for browser clients, they may send a wider variety of ContentTypes,
which requires server-side support for decoding, such as:
+
+* multipart/formdata
+* text/plain
+* application/x-www-form-urlencoded
+* application/xml
+
+REST protocol has already largely implemented the above decoding capabilities.
Enabling Triple to achieve these capabilities is an important step towards full
interoperability between Triple server and browser clients.
+
+
+#### **Usage**
+
+##### **multipart/formdata**
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetPojo HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: multipart/form-data; boundary=example-part-boundary
+Accept: application/json
+--example-part-boundary
+Content-Disposition: form-data; name="username"
+Content-Type: text/plain
+LuYue
+--example-part-boundary
+Content-Disposition: form-data; name="userdetail"
+Content-Type: application/json
+{
+ "location":"beijing",
+ "username":"LuYue"
+}
+--example-part-boundary
+Content-Disposition: form-data; name="userimg";filename="user.jpeg"
+Content-Type: image/jpeg
+<binary image data>
+--example-part-boundary--
+```
+
+Receiving:
+
+```java
+ @Override
+ public ServerResponse greetPojo(String username, User user, byte[]
attachment) {
+ //LuYue
+ System.out.println(username);
+ //user.name=Luyue;user.location=beijing
+ System.out.println(user);
+ //<binary image data>
+ System.out.println(new String(attachment, StandardCharsets.UTF_8));
+ return new ServerResponse("Server Received:" + username);
+ }
+```
+
+* Each part is decoded according to its Content-Type.
+* If the method parameter is byte[] or Byte[], the corresponding field will
not be decoded.
+* The response is encoded using application/json.
+
+##### **application/x-www-form-urlencoded**
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetUrlForm HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: application/x-www-form-urlencoded
+Content-Length: 33
+Accept: application/json
+Hello=World&Apache=Dubbo&id=10086
+```
+
+Two ways of receiving:
+
+```java
+ public ServerResponse greetUrlForm(String hello, String apache, long id){
+ System.out.println("Hello:" + hello);
+ System.out.println("Apache:" + apache);
+ System.out.println("Id:" + id);
+ return new ServerResponse("Server Received url form");
+ }
+```
+
+```java
+ public ServerResponse greetUrlForm(Map<String, Object> params){
+ System.out.println("Hello:" + params.get("Hello"));
+ System.out.println("Apache:" + params.get("Apache"));
+ System.out.println("Id:" + params.get("Id"));
+ return new ServerResponse("Server Received url form");
+ }
+```
+
+* If the parameter is a Map, it is decoded into Map<String, String> for input.
+* If all parameters are Strings or numeric types, they are decoded and passed
in according to the parameter list.
+* The response is encoded using application/json.
+
+##### **text/plain**
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetString HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: text/plain; charset=UTF-8
+Content-Length: 6
+Accept: application/json
+World!
+```
+
+Receiving:
+
+```java
+ public ServerResponse greetString(String world){
+ System.out.println("Hello:" + world);
+ return new ServerResponse("Server Received url form.");
+ }
+```
+
+* Charset supports ASCII, UTF-8, UTF-16, etc., with UTF-8 as the default.
+* The response is encoded using application/json.
+
+##### **application/xml**
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetXml HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: application/xml
+Content-Length: 86
+Accept: application/xml
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<User>
+ <username>JohnDoe</username>
+ <location>New York</location>
+</User>
+```
+
+Receiving:
+
+```java
+ @Override
+public ServerResponse greetXml(User user) {
+ System.out.println(user.getUsername());
+ System.out.println(user.getLocation());
+ return new ServerResponse("Server Received xml.");
+ }
+```
+
+* This implementation is the same as Rest's XMLCodec.
+* The response is encoded using application/xml.
\ No newline at end of file
diff --git
a/content/zh-cn/overview/reference/proposals/support-more-content-types.md
b/content/zh-cn/overview/reference/proposals/support-more-content-types.md
new file mode 100644
index 00000000000..35a4050dbb4
--- /dev/null
+++ b/content/zh-cn/overview/reference/proposals/support-more-content-types.md
@@ -0,0 +1,172 @@
+---
+aliases:
+ - /zh/overview/reference/proposals/support-more-content-type/
+author: 武钰皓
+description: |
+ 本文主要介绍Triple对更多Http标准Content-Type的支持方式,以及服务该如何接收这些请求。
+title: Triple协议Http标准能力增强-多Content-Type支持
+type: docs
+working_in_progress: true
+---
+
+### **Triple协议Http标准能力增强-多Content-Type支持**
+> 本文主要介绍Triple对更多HTTP标准Content-Type的支持方式,以及服务该如何接收这些请求。
+#### **概述**
+
+Triple目前支持两种序列化方式:Json和protobuf,对应的ContentType:
+
+* application/json
+* application/grpc+proto
+
+这在消费者和提供者都是后端服务时没有问题。但对于浏览器客户端,其可能发送更多类型的ContentType,需要服务端支持解码,如:
+
+* multipart/formdata
+* text/plain
+* application/x-www-form-urlencoded
+* application/xml
+
+Rest已基本实现上述解码能力,使Triple实现这些能力是让Triple服务端与浏览器客户端完全互通的重要一步。
+
+
+
+#### **用法**
+
+##### **multipart/formdata**
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetPojo HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: multipart/form-data; boundary=example-part-boundary
+Accept: application/json
+
+--example-part-boundary
+Content-Disposition: form-data; name="username"
+Content-Type: text/plain
+
+LuYue
+--example-part-boundary
+Content-Disposition: form-data; name="userdetail"
+Content-Type: application/json
+
+{
+ "location":"beijing",
+ "username":"LuYue"
+}
+--example-part-boundary
+Content-Disposition: form-data; name="userimg";filename="user.jpeg"
+Content-Type: image/jpeg
+<binary-image data>
+--example-part-boundary--
+```
+
+接收:
+
+```java
+ @Override
+ public ServerResponse greetPojo(String username, User user, byte[]
attachment) {
+ //LuYue
+ System.out.println(username);
+ //user.name=Luyue;user.location=beijing
+ System.out.println(user);
+ //<binary-image data>
+ System.out.println(new String(attachment, StandardCharsets.UTF_8));
+ return new ServerResponse("Server Received:"+username);
+ }
+```
+
+* 每一个 part 根据其 Content-Type 解码
+* 若方法参数是 byte[] 或 Byte[],对应字段不会解码
+* 响应使用 application/json 编码
+
+
+
+##### application/x-www-form-urlencoded
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetUrlForm HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: application/x-www-form-urlencoded
+Content-Length: 33
+Accept: application/json
+Hello=World&Apache=Dubbo&id=10086
+```
+
+两种接收方式:
+
+```java
+ public ServerResponse greetUrlForm(String hello,String apache,long id){
+ System.out.println("Hello:"+hello);
+ System.out.println("Apache:"+apache);
+ System.out.println("Id:"+id);
+ return new ServerResponse("Server Received url form");
+ }
+```
+
+```java
+ public ServerResponse greetUrlForm(Map<String,Object> params){
+ System.out.println("Hello:"+params.get("Hello"));
+ System.out.println("Apache"+params.get("Apache"));
+ System.out.println("Id"+params.get("Id"));
+ return new ServerResponse("Server Received url form");
+ }
+```
+
+* 若参数为Map,则解码为Map<String,String>传入
+* 若参数均为String或数值类型,按照参数列表逐个解码传入
+* 响应使用 application/json 编码
+
+
+
+##### text/plain
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetString HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: text/plain; charset=UTF-8
+Content-Length: 6
+Accept: application/json
+World!
+```
+
+接收:
+
+```java
+ public ServerResponse greetUrlForm(String world){
+ System.out.println("Hello:"+ world);
+ return new ServerResponse("Server Received url form.");
+ }
+```
+
+* charset支持ASCII、UTF-8、UTF-16等,默认UTF-8
+* 响应使用 application/json 编码
+
+
+
+##### application/xml
+
+```http
+POST /org.apache.dubbo.samples.tri.noidl.api.PojoGreeter/greetXml HTTP/1.1
+Host: 192.168.202.1:50052
+Content-Type: application/xml
+Content-Length: 86
+Accept: application/xml
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<User>
+ <username>JohnDoe</username>
+ <location>New York</location>
+</User>
+```
+
+接收:
+
+```java
+ @Override
+ public ServerResponse greetXml(User user) {
+ System.out.println(user.getUsername());
+ System.out.println(user.getLocation());
+ return new ServerResponse("Server Received xml.");
+ }
+```
+
+* 该实现与Rest的XMLCodec相同
+* 响应使用 application/xml 编码
\ No newline at end of file