Wygląda na to, że oba te klejnoty wykonują bardzo podobne zadania. Czy ktoś może podać przykłady, gdzie jeden klejnot byłby bardziej użyteczny od drugiego? Nie mam konkretnego kodu, do którego się odnawiam, bardziej zastanawiam się nad ogólnymi przypadkami użycia dla każdego klejnotu. Wiem, że to krótkie pytanie, wypełnię puste pola na życzenie. Dzięki.Jaka jest różnica między klejnotami Ruby "open-uri" i "Net: HTTP"?
Odpowiedz
Powodem, dla którego wyglądają, że wykonują podobne zadania, jest OpenURI to opakowanie dla Net :: HTTP, Net :: HTTPS i Net :: FTP.
Zwykle, chyba że uważasz, że potrzebujesz interfejsu niższego poziomu, korzystanie z OpenURI jest lepsze, ponieważ możesz uzyskać mniej kodu. Za pomocą OpenURI można otworzyć URL/URI i potraktować go jako plik.
Patrz: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open-uri/rdoc/OpenURI.html i http://ruby-doc.org/stdlib-1.9.3//libdoc/net/http/rdoc/Net.html
Dzięki Alex. Przepraszam, co to jest "opakowanie"? –
Owijarka jest po prostu biblioteką, która używa jednej lub więcej innych bibliotek do stworzenia ładniejszego interfejsu wyższego poziomu. W tym konkretnym przypadku OpenURI używa bibliotek Net, aby odsłonić bardziej znany interfejs, tj. Odczyt z pliku. –
Właśnie się dowiedziałem, że open
robi śledzić przekierowania, a Net::HTTP
nie, która jest istotna różnica.
Na przykład open('http://www.stackoverflow.com') { |content| puts content.read }
wyświetli prawidłowy kod HTML po wykonaniu przekierowania, a Net::HTTP.get(URI('http://www.stackoverflow.com'))
wyświetli komunikat przekierowania i kod statusu 302.
Jeśli 'open-uri' pasuje do swojej nazwy, prawdopodobnie oznacza, że może obsługiwać inne schematy niż' http'. – fge