2015-09-22 26 views
6

Mục đích của các con số trước mỗi tham số (số nhận dạng trường) là gì? Tại sao nó nhảy từ 5 đến 16?Mục đích của việc đánh số tham số là gì?

struct Tweet { 
    1: required i32 userId; 
    2: required string userName; 
    3: required string text; 
    4: optional Location loc; 
    5: optional TweetType tweetType = TweetType.TWEET; 
    16: optional string language = "english"; 
} 

(Snippet từ http://diwakergupta.github.io/thrift-missing-guide/)

Tôi đã cố gắng để tìm ra câu trả lời cho điều này trong một thời gian và đã không tìm thấy bất cứ điều gì trong tài liệu.

Trả lời

5

Đó là cái gọi là trường ID, số nguyên 32 bit. Ngoại trừ chính dữ liệu, đây là điều duy nhất đi qua dây để cho phép phía bên kia xác định chính xác trường mà dữ liệu thuộc về.

Trong những lần trước hệ thống tự động cung cấp các ID này trong nội bộ, dẫn đến không tương thích: nếu ai đó thay đổi thứ tự các trường, hãy thêm trường vào giữa các trường khác hoặc trường đã xóa. Đối với lý do tương thích, bạn vẫn có thể bỏ qua những con số và có hệ thống phân bổ ID tiêu cực tự động 1):

struct yeolde { 
    i32 foo 
    string bar 
} 

nhưng bây giờ bạn nhận được một cảnh báo tốt đẹp về nó:

$ thrift -gen csharp test.thrift 
[WARNING:test.thrift:3] No field key specified for foo, resulting protocol may have conflicts or not be backwards compatible! 
[WARNING:test.thrift:4] No field key specified for bar, resulting protocol may have conflicts or not be backwards compatible! 

Tại sao nó nhảy từ 5 đến 16?

Người ta có thể đã quyết định đó là một ý tưởng hay. Không có nhiều hạn chế khác với số đó phải là giá trị 32 bit dương > 0.

Hoặc có các trường đã bị xóa trong thời gian chờ đợi. Đặc biệt đối với trường hợp thứ hai, chúng tôi khuyên bạn nên ghi chú các trường đã lỗi thời nhưng để chúng trong IDL để ngăn ngừa tai nạn tương thích vì ai đó "sử dụng lại" số cũ đã sử dụng và lỗi thời cho các mục đích mới.


1) Đó là lý do tại sao số ID âm không được phép.

Các vấn đề liên quan