разумеется, закопали. Пых эксгумировали, а рельсы на его место. разговор ни о чем, холивар для серча.... каждому свое, конечно, но все эти разговоры о "смерти" того или иного языка/фреймворка для меня всегда суть попытки переноса на логику технических абстракций - сугубо человеческих ярлыков. Да не обидится на меня @igordata , знаю его мнение на сей счет. Если попросту, не нужно дроч... т.е. прошу прощения, сублимировать - на профессиональный инструментарий, это далеко не альфа и омега в жизни. Фреймворк обновляется? - обновляется, ждем как раз 5.2. Апдейты минорные? - нет, ничего подобного. Ну и все, остальное демагогия. Кроме того, чтобы думать, надо знать. Коли уж тема о тестировании и тестах, вот щас и проверим... чем на рельсах заменить CURL, расскажи? в пыхе без него как без рук, а что с этим на rails? - крайне несложный вопрос, без подвохов (ни леса, ни сосен). --- Добавлено --- rishard,9 мин. назад время, время. Гугль тормозит нонче?
Ну, начнем с того, что я ни разу не утверждал что работаю с рельсам, что очевидно из того что я написал. Ну а ответ прост: curl`ом, потому что к php он имеет отношение лишь наличием в нем обертки для libcurl. Уверен, для руби она тоже есть. p.s. и в php можно обойтись без curl`а. Внезапно )
Ответ неверный, аргументация здесь. Неверный не потому, что не знаешь, а потому, что делаешь выводы на основе незнания. А это суть болтовня ни о чем. В качестве иллюстрации... или альтернативы... ну, php-программисты поймут, код примитивен, логика стереотипна, да и как она может быть иной в рамках одного и того же API... взгляните, написал как-то по приколу логику обновлялки резюме HH на пыхе и на рельсах. В оф. доках этого примера нет, ни первого ни второго, и сравнить любопытно: один в один те же яйца, но написаны по разному. Использовал typhoeus, напрямую "curl-ом", как видно из инфы по ссылке, нельзя. PHP: <?php $client_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; $client_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; if (empty($_GET['code'])) { echo '<p><a href="https://hh.ru/oauth/authorize?response_type=code&client_id=' . $client_id . '">Обновить резюме</a></p>'; } else { if ($curl = curl_init()) { curl_setopt($curl, CURLOPT_URL, 'https://hh.ru/oauth/token'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POSTFIELDS, "grant_type=authorization_code&client_id=" . $client_id . "&client_secret=" . $client_secret . "&code=" . $_GET['code']); $out = curl_exec($curl); curl_close($curl); } $token_json = json_decode($out); $headers = array( 'Authorization: Bearer ' . $token_json->access_token, 'User-Agent: Masterpro' ); if ($curl = curl_init()) { curl_setopt($curl, CURLOPT_URL, 'https://api.hh.ru/resumes/mine'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $out = curl_exec($curl); curl_close($curl); } $resumes = json_decode($out); echo '<strong>Статус обновлений резюме:</strong></br>'; foreach ($resumes->{'items'} as $item) { if ($curl = curl_init()) { curl_setopt($curl, CURLOPT_URL, 'https://api.hh.ru/resumes/' . $item->id . '/publish'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $out = curl_exec($curl); curl_close($curl); if(empty($out)) { echo 'Резюме ' . '"' . $item->title . '"' . ' успешно обновлено.</br>'; } else { echo $out . '</br>'; echo 'Резюме ' . '"' . $item->title . '"' . ' было обновлено ' .($item->updated . '</br>'); } } } } Код (Text): class HhcorrController < ApplicationController def index if params[:code].present? id_hh = ENV['ID_HH_CORR'] #'*******************' secret_hh = ENV['SECRET_HH_CORR'] #'*******************' response = Typhoeus::Request.post('https://hh.ru/oauth/token', params: { :grant_type => "authorization_code", :client_id => id_hh, :client_secret => secret_hh, :code => params[:code] } ) hash = JSON.parse(response.body) response = Typhoeus::Request.get('https://api.hh.ru/negotiations/active?pages=1&per_page=15', method: :get, headers: { Authorization: "Bearer #{hash['access_token']}" } ) @response = JSON.parse(response.body) response = Typhoeus::Request.get('https://api.hh.ru/resumes/mine', method: :get, headers: { Authorization: "Bearer #{hash['access_token']}" } ) response = JSON.parse(response.body) @response1 = [] response['items'].each do |item| response = Typhoeus::Request.get('https://api.hh.ru/resumes/' + item['id'] + '/views?pages=1&per_page=5', method: :get, headers: { Authorization: "Bearer #{hash['access_token']}" } ) @response1 << JSON.parse(response.body) end end end end P.S. Кто сомневается, могу дать ссылку в вебе потестить. Резюме то на HH у всех есть, надо полагать.
То и значит: Ruby's net/http is notorious for not having the friendliest API, but it isn't all that bad. Ruby has great gems like faraday, but in libraries and small utilities it's better to kill your dependencies and use what the stdlib provides. This tool turns a curl command into ruby (2.0+) code using net/http, blahblahblah.
ты формочку по ссылке видишь? по заморскому читать умеешь? пастишь curl туда и получаешь в ответ то, что приемлемо в рельсах, или используешь faraday / typhoeus. По другому никак. --- Добавлено --- Не веришь мне, взгляни на SO. Во всех без исключения случаях это самый авторитетный источник; для меня по крайней мере.
Поработайте с nodejs возьмите какой нибудь sailsjs и перестаньте наконец плакаться) А лучший все равно python)
Не более, чем википедия. Итак, typhoeus имеет в зависимостях ethon, который в свою очередь имеет в зависимостях ffi, а он подгружает libcurl. И в php и в ruby мы видим две реализации обертки над одним и тем же курлом. Вопрос повторить? --- Добавлено --- Я последнее время на ноде пишу больше, чем на пыхе )
Нвчни с малого. А то тебя уже второй день тут домогают ответом на элементарный вопрос, а ты все про питон глаголешь. На форумах это еще туда-сюда проканает, а вот на собеседованиях забакланить не удастся: тесты проходили когда-то все тестировщики, оторвутся на тебе по полной, чистеньким уйти не удастся. Суровая и циничная проза жизни. ))) вопрос уже прозвучал, ты на него не ответил, поскольку имя либы/пакета/гема не назвал. Можно и самому тот или иной экстеншен написать, но это не ответ и незачет: я спрашивал об актуальной конъюнктуре работы. Как и было сказано, вопрос преследовал целью понять, имеешь ли ты какое-то представление о рельсах, прежде чем их хоронить. Может, они три раза уже умерли, я спорить не хочу и не буду. И питон штука классная, кто бы спорил. Но чтобы обо всем об этом с уверенностью говорить, необходимо тему просекать, хотя бы в общих чертах. Мой близкий приятель, профессиональный devops со стажем работы в международных компаниях, недавно вознамерился рельсы изучить, и не сумел их на бубунту свою поставить, уж не знаю почему (всю сознательную жизнь я на редхате или rpm-based дистрах; на федорке установка рельсов - это реально полторы - две минуты максимум). Ну вот он три часа про"бался, а потом начал мне перлы задвигать, типа не рельсы и были, умерли, и тому подобное. Все это один в один напомнило мне эзоповскую басню под названием Лиса и виноград, если кто помнит.
У меня всё. То что ты не знаешь, как и на основе чего работают гемы которые ты используешь - не мои проблемы.
Сколько вам потребовалось для этого "все", ув. тестируемый? вы забыли о времени, и вот это и правда все. Да и с английским, смотрю, у вас проблемы... на моей памяти, утверждение о нецелесообразности использования фреймворка потребовало у вас значительно меньше времени. Повторюсь: чтобы с уверенностью говорить о смерти или бессмертии фреймворка, языка или иной логической абстракции - необходимо эти абстракции досконально знать. В противном случае имеет место пустопорожняя болтовня, что и имело место в данном случае. И настаиваю: "напрямую курлом", как я показал в своем php-коде - на рельсах нельзя, есть только обходные пути: Ruby's net/http is notorious for not having the friendliest API, but it isn't all that bad. Ruby has great gems like faraday, but in libraries and small utilities it's better to kill your dependencies and use what the stdlib provides. This tool turns a curl command into ruby (2.0+) code using net/http, blahblahblah.
Ну, я потратил немало времени, что бы убедиться в том, что мой ответ был верен, а ты опять сказал чушь. Заодно освежил свои знания по руби. Но при чем тут это? И да, мой английский может и далек от идеала, но я хотя бы не пользуюсь гемами работающими на libcurl сам не зная этого и утверждая что в руби курла нет )
Процитирую-ка я самого себя любимого. Рельсы умерли, да здравствуют рельсы. Пока живы непрофессионализм и апломб разработчиков, так оно и будет. )) P.S. Да, а еще ты, как мне показалось, не вполне отчетливо видишь разницу между cURL и libcurl. Пролистай наверх, как звучал мой вопрос? - короче, мы вам позвоним, спасибо что пришли.
Аргументация? Ты сам в своем же примере воспользовался популярным gem`ом использующим curl и ссылаешься на сайт, который транслирует синтаксис консольного curl в net/http. Что само по себе забавный аргумент, да. По факту: курл в руби можно заменить курлом, о чем я и говорил изначально и сразу. Всё. И да, я не утверждал что рельсы мертвы ) Впрочем, утомило. --- Добавлено --- эм... а как же nightmarejs?
Уважаемый соискатель, вы уходите от ответа. Вернее сказать, пытаетесь уйти. Нам тут действительно начинает казаться, что вы несколько переутомились.... со своей стороны заверяем, что вопросы всех наших тестировщиков тщательно записываются, дабы можно было воспроизвести в любой момент, и пресечь тем самым попытки инсинуаций. Которые, увы, случаются среди соискателей. Подумайте спокойно, и не торопясь, прежде чем ответить, полистайте излюбленную вами википедию. А затем все же постарайтесь ответить: вы в самом деле не понимаете разницы между CURL и libcurl ? Тестировщик охотно распишется в собственной профессиональной несостоятельности, и извинится перед вами, если вы сумеете процитировать его вопрос о libcurl. Но если вы этого сделать не сумеете, и вопрос касался все-таки CURL, то сделать то же самое придется вам. Идет? Это вполне адекватная постановка вопроса и это честно: с вашей стороны прозвучало обвинение в профессиональной несостоятельности, которое априори придется доказывать техническим языком, в противном случае ваше заявление обернется против вас. Если не сумеете - "не ваши проблемы" автоматом становятся вашими, вы допустили грубую ошибку, которая не только делает невозможным оформление контракта между вами и нашей международной компанией... но и ставит под сомнение вашу профессиональную репутацию. Итак, жду ответа. CURL и libcurl для вас в самом деле настолько похожие сущности, что вы не видите между ними разницы? вас спрашивают, чем на рельсах заменить CURL (цитата), а вы в качестве ответа рассказываете нам о зависимостях гема и либе?
@rishard Я как бы не вникал о чем вы но In order to use PHP's cURL functions you need to install the » libcurl package. PHP requires that you use libcurl 7.0.2-beta or higher. In PHP 4.2.3, you will need libcurl version 7.9.0 or higher. From PHP 4.3.0, you will need a libcurl version that's 7.9.8 or higher. PHP 5.0.0 requires a libcurl version 7.10.5 or greater. А вот с манула curl_reset — Reset all options of a libcurl session handle И вообще какая разница главное что б апи красивое было. Тоже мне проблему нашли.
Цитирую википедию: "Libcurl — это библиотека API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl." И? Я в курсе этого. А вот что я действительно люблю, так это первоисточники. Переводить надо? https://curl.haxx.se/libcurl/bindings.html Уважаемый соискатель пока ещё может позволить себе оценивать тестировщика в равной степени. И скорее всего действительно уйдет. --- Добавлено --- ext-curl в php - это обертка над libcurl. Чем можно заменить одну обертку? Другой оберткой.
@romach Почему с тобой все всегда спорят о 30кб трафика и 30кб оперативки? И вообще не пойму сути. Базовые функции все равно все на низкоуровневых языках.