goaで指定するホスト名はRFC1035に準拠させること
goaのコード読んでて気づいたのでメモ。
DSLのHost
APIが想定しているホスト名を指定するためのDSL(func)で、以下のように実装されている。
// Regular expression used to validate RFC1035 hostnames*/ var hostnameRegex = regexp.MustCompile(`^[[:alnum:]][[:alnum:]\-]{0,61}[[:alnum:]]|[[:alpha:]]$`) // Host sets the API hostname. func Host(host string) { if !hostnameRegex.MatchString(host) { dslengine.ReportError(`invalid hostname value "%s"`, host) return } if a, ok := apiDefinition(); ok { a.Host = host } }
入力されたホスト名に対して hostnameRegex
の正規表現にマッチするかのチェックを行っている。
RFC1035 とは
DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION ということで色々書いてある。
2.3.1. Preferred name syntax では以下のように言及されている。
They must start with a letter, end with a letter or digit, and have as interior characters only letters, digits, and hyphen. There are also some restrictions on the length. Labels must be 63 characters or less.
この辺りの内容を正規表現で表しているっぽい。