Tipo MIME YAML?


112

Qual é o tipo MIME mais apropriado para usar ao enviar dados estruturados com YAML sobre HTTP?

Uma explicação de por que uma determinada escolha é mais apropriada seria muito apreciada.

Não há nenhum tipo de aplicativo registrado ou tipo de texto que eu consiga ver.

Exemplo:

> GET /example.yaml

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

Opções possíveis:

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

Respostas:


64

Ruby on Rails usa application/x-yamlcom uma alternativa de text/yaml( fonte ).

Acho que é só uma questão de convenção, não há um porquê técnico , pelo que eu sei.


79
Isso não é bem verdade. Os tipos MIME que começam com text/devem ser processados ​​como ISO-8859-1, a menos que outro tipo MIME seja declarado explicitamente (por exemplo text/html; charset=utf-8). Os tipos MIME que começam com application/são processados ​​como UTF-8, a menos que outro tipo Mime seja declarado explicitamente. Por exemplo, text/x-yamlnão pode usar caracteres UTF-8 enquanto text/x-yaml; charset=utf-8e application/x-yamlpode. IIRC, isso é definido no RFC 3023.
Ryan Parman

2
@RyanParman Você está confundindo um pouco o conjunto de caracteres e o tipo MIME. Você está certo que text/*, sem um charset=parâmetro explícito, presume-se que seja ISO-8859-1, mas as coisas application/*não são necessariamente texto. (O RFC que você vinculou é sobre XML, não tenho certeza de como ele é relevante.)
Thanatos

3
@RyanParman Não é verdade. tools.ietf.org/html/rfc6838#section-4.2.1 diz: 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.. Não há definição formal de text/yamlnem text/x-yaml, então o padrão é UTF-8.
aef

7
O RFC 3023, incluindo o manuseio da codificação, tornou-se obsoleto em 2014 por tools.ietf.org/html/rfc7303#section-3 . A regra de padrão para US-ASCII(nota: não ISO-8859-1) para text/*tipos de mídia no RFC 2046 tornou-se obsoleta 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.em tools.ietf.org/html/rfc6838#section-4.2.1 em janeiro de 2013. Nem o RFC 3023 nem o RFC 7303 dizem nada genérico sobre text/*ATÉ ONDE SEI.
aef

6
@RyanParman Portanto, sua conclusão provavelmente estava correta naquela época, mas você erroneamente referenciou a RFC 3023, enquanto a regra veio da RFC 2046. Hoje, entretanto, UTF-8é o padrão para cada text/*tipo de mídia que não declara algo diferente em seu registro IANA.
aef

22

Embora outra resposta tenha sido aceita, consulte esta Proposta de registro de tipo de mídia para discussão YAML na lista de e-mails da IANA para revisão do tipo de mídia em que Ben Harris, da University of Cambridge Information Services, propôs em julho de 2015 em nome da equipe YAML o tipo de mídia :

text/vnd.yaml

com aliases obsoletos (sugeridos):

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

Isso ainda está proposto / pendente (o tópico não indica o status da proposta), portanto, esta resposta não é mais definitiva do que as outras :-)


11
Parece que a proposta não deu em nada desde janeiro de 2018, e minhas tentativas de entrar em contato com o autor ficaram sem resposta
djb

15

Eu diria text / x-yaml:

texto sobre a aplicação porque é legível por humanos

x-yaml sobre yaml porque não foi aceito na lista registrada de tipos MIME.

Editar: de RFC 3023 (Tipos de mídia XML):

O tipo de mídia de nível superior "texto" tem algumas restrições sobre entidades MIME e são descritas em [RFC2045] e [RFC2046]. Em particular, a família UTF-16, UCS-4 e UTF-32 não são permitidos (exceto sobre HTTP [RFC2616], que usa um mecanismo semelhante ao MIME).

Interessante ... Não tenho certeza do que significa, mas alimento para reflexão.


1
É legível por humanos, mas sua intenção é comunicar aplicativos ... XML está sob aplicação
Vinko Vrsalovic

E também em texto. Parece que você precisaria de text / x-yaml e application / x-yaml ... rfc-editor.org/rfc/rfc3023.txt
Vinko Vrsalovic

Pelo que vale a pena, isso é o que a implementação TastyPie REST do Django entende.
Michael Scheper,

1
... mas JSON não é legível por humanos também? Acho que seria mais consistente dizer application/yaml, assim como poderíamos dizer application/jsone applicaiton/xml.
Anthony Rutledge

7

Tipos de mídia "x-" não são recomendados, consulte RFC 4288, Seção 3.4 . A coisa certa a fazer é usar a árvore pessoal, a árvore do fornecedor ou realmente tentar um registro de tipo de mídia adequado.


Então isso seria application/vnd.yamlou text/vnd.yaml(o texto parece melhor)
fios

Não é totalmente verdade também. A única árvore de subtipo que deve ser usada sem registro na IANA é x.. vnd.e prs.requer registro. Consulte tools.ietf.org/html/rfc6838#section-3.2 e tools.ietf.org/html/rfc6838#section-3.3 .
aef

3

No Chrome application/yamlirá baixar, enquanto text/yamlserá exibido.


Isso não fornece uma resposta para a pergunta. Assim que tiver reputação suficiente, você poderá comentar sobre qualquer postagem ; em vez disso, forneça respostas que não exijam esclarecimentos do autor da pergunta . - Da avaliação
ysf

2
@ysf Seu comentário é excessivamente pedante, IMO. A postagem é breve, mas acumulativa, responde à pergunta do OP, explica o "porquê" de cada opção E se esforça para declarar suas limitações ("... pelo menos no Chrome isso é verdade"). Sem mencionar: ninguém mais forneceu Essa informação. O OP pode nem mesmo ter considerado que diferentes tipos de conteúdo podem resultar em comportamentos diferentes, que podem ser realmente úteis para ele ou ela.
Dan H

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.