YAML loại kịch câm?


111

Loại MIME thích hợp nhất để sử dụng khi gửi dữ liệu có cấu trúc YAML qua HTTP là gì?

Một lời giải thích về lý do tại sao một lựa chọn nhất định là thích hợp nhất sẽ được đánh giá cao.

Không có loại ứng dụng đã đăng ký hoặc loại văn bản mà tôi có thể thấy.

Thí dụ:

> GET /example.yaml

< Content-Type: ????
<
< --- # Favorite movies
< - Casablanca
< - North by Northwest
< - Notorious

Các tùy chọn có thể có:

text/yaml
text/x-yaml
application/yaml
application/x-yaml

Câu trả lời:


64

Ruby on Rails sử dụng application/x-yamlthay thế cho text/yaml( nguồn ).

Tôi nghĩ đó chỉ là vấn đề quy ước, không có lý do kỹ thuật nào , theo như tôi có thể nói.


78
Điều này không hoàn toàn đúng. Các loại text/kịch câm bắt đầu bằng phải được xử lý dưới dạng ISO-8859-1 trừ khi một loại kịch câm khác được khai báo rõ ràng (ví dụ text/html; charset=utf-8). Các kiểu application/mime bắt đầu bằng được xử lý dưới dạng UTF-8 trừ khi một kiểu mime khác được khai báo rõ ràng. Ví dụ: text/x-yamlkhông thể sử dụng ký tự UTF-8 trong khi text/x-yaml; charset=utf-8application/x-yamlcó thể. IIRC, điều này được định nghĩa trong RFC 3023.
Ryan Parman

2
@RyanParman Bạn có một bộ ký tự khó hiểu và kiểu MIME hơi khó hiểu. Bạn nói đúng rằng text/*, không có charset=thông số rõ ràng được coi là ISO-8859-1, nhưng những thứ application/*không nhất thiết phải là văn bản. (RFC bạn đã liên kết là về XML, không chắc nó có liên quan như thế nào.)
Thanatos

3
@RyanParman Không đúng. tools.ietf.org/html/rfc6838#section-4.2.1 nói: If a "charset" parameter is specified, it SHOULD be a required parameter, eliminating the options of specifying a default value. If there is a strong reason for the parameter to be optional despite this advice, each subtype MAY specify its own default value, or alternatively, it MAY specify that there is no default value. Finally, the "UTF-8" charset [RFC3629] SHOULD be selected as the default.. Không có định nghĩa chính thức về text/yamlcũng không text/x-yaml, vì vậy mặc định là UTF-8.
aef

7
RFC 3023, bao gồm cả việc xử lý mã hóa đã được công cụ tools.ietf.org/html/rfc7303#section-3 loại bỏ vào năm 2014 . Các quy tắc để mặc định US-ASCII(lưu ý: không ISO-8859-1) cho text/*các loại phương tiện truyền thông trong RFC 2046 đã lỗi thời bởi Regardless of what approach is chosen, all new text/* registrations MUST clearly specify how the charset is determined; relying on the US-ASCII default defined in Section 4.1.2 of [RFC2046] is no longer permitted.trong tools.ietf.org/html/rfc6838#section-4.2.1 vào tháng giêng năm 2013. Cả RFC 3023 cũng không RFC 7303 nói bất cứ điều gì chung về text/*BẤT NGỜ.
aef

6
@RyanParman Vì vậy, kết luận của bạn có thể đúng vào thời điểm đó nhưng bạn đã tham chiếu nhầm RFC 3023, trong khi quy tắc đến từ RFC 2046. Tuy nhiên, ngày nay UTF-8là mặc định cho mọi text/*loại phương tiện không nêu điều gì đó khác biệt trong đăng ký IANA của nó.
aef

21

Mặc dù câu trả lời khác đã được chấp nhận, vui lòng tham khảo đăng ký loại phương tiện được đề xuất này cho chuỗi YAML trên danh sách gửi thư IANA để xem xét loại phương tiện mà Ben Harris, Dịch vụ thông tin của Đại học Cambridge, đã đề xuất vào tháng 7 năm 2015 thay mặt cho nhóm YAML loại phương tiện :

text/vnd.yaml

với bí danh (được đề xuất) không dùng nữa:

text/yaml
text/x-yaml
application/x-yaml

Điều đó vẫn được đề xuất / đang chờ xử lý (chủ đề không cho biết trạng thái của đề xuất) vì vậy câu trả lời này không chắc chắn hơn những câu khác :-)


11
Có vẻ như đề xuất đó đã không đi đến đâu kể từ tháng 1 năm 2018 và nỗ lực của tôi để liên hệ với tác giả đã không được trả lời
djb

15

Tôi muốn nói text / x-yaml:

nhắn tin qua ứng dụng vì con người có thể đọc được

x-yaml thay vì yaml vì nó chưa được chấp nhận trong danh sách các loại kịch câm đã đăng ký.

Chỉnh sửa: từ RFC 3023 (Loại phương tiện XML):

Loại phương tiện cấp cao nhất "văn bản" có một số hạn chế đối với các thực thể MIME và chúng được mô tả trong [RFC2045] và [RFC2046]. Cụ thể, họ UTF-16, UCS-4 và UTF-32 không được phép (ngoại trừ qua HTTP [RFC2616], sử dụng cơ chế giống MIME).

Thật thú vị ... Không chắc nó có nghĩa là gì, nhưng là thức ăn cho suy nghĩ.


1
Con người có thể đọc được nhưng mục đích của nó là giao tiếp các ứng dụng ... XML đang được ứng dụng
Vinko Vrsalovic

Và cả dưới văn bản. Có vẻ như bạn phải có cả văn bản / x-yaml và ứng dụng / x-yaml ... rfc-editor.org/rfc/rfc3023.txt
Vinko Vrsalovic

Đối với những gì nó đáng giá, đây là những gì triển khai TastyPie REST của Django hiểu.
Michael Scheper

1
... nhưng JSON không phải con người cũng có thể đọc được? Tôi nghĩ sẽ nhất quán hơn nếu nói application/yaml, giống như chúng ta có thể nói application/jsonapplicaiton/xml.
Anthony Rutledge

7

Loại phương tiện "x-" không được khuyến khích, xem RFC 4288, Phần 3.4 . Điều đúng đắn cần làm là sử dụng cây cá nhân, cây nhà cung cấp hoặc thực sự cố gắng đăng ký loại phương tiện thích hợp.


Vì vậy, đó sẽ là application/vnd.yamlhoặc text/vnd.yaml(văn bản có vẻ tốt hơn)
dây

Cũng không hoàn toàn đúng. Cây loại con duy nhất được thiết kế để sử dụng mà không cần đăng ký với IANA là x.. vnd.prs.yêu cầu đăng ký. Xem tools.ietf.org/html/rfc6838#section-3.2tools.ietf.org/html/rfc6838#section-3.3 .
aef


1

Trên Chrome application/yamlsẽ tải xuống, trong khi text/yamlsẽ hiển thị.


Điều này không cung cấp câu trả lời cho câu hỏi. Một khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp các câu trả lời không yêu cầu người hỏi làm rõ . - Từ đánh giá
ysf

1
@ysf Nhận xét của bạn quá ngớ ngẩn, IMO. Bài đăng ngắn gọn nhưng tích lũy, trả lời câu hỏi của OP, giải thích "tại sao" của mỗi tùy chọn, VÀ cố gắng nêu những hạn chế của nó ("... ít nhất trên Chrome điều này là đúng".) Chưa kể: không có ai khác cung cấp thông tin này. OP thậm chí có thể đã không xem xét rằng các Loại Nội dung khác nhau có thể dẫn đến các hành vi khác nhau, mà về thực tế, có thể hữu ích cho họ.
Dan H
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.