�gRESTful�h��Ruby on Rails 2.0�����[�X

�uRuby on Rails 2.0�v�ł�REST�T�|�[�g����������A�Z�L�����e�B�����P����Ă���B

» 2007�N12��11�� 11��29�� ���J
[Darryl K. Taft�CeWEEK]
eWEEK

�@Web�J���t���[�����[�N�uRuby on Rails�v�̑Җ]�̃o�[�W����2�������[�X���ꂽ�B

�@�o�[�W����2�������[�X���ꂽ�̂�12��7���B��v�ȋ����@�\�Ƃ��ẮAREST�iRepresentational State Transfer�j�̃T�|�[�g�����ƁA�Z�L�����e�B�̉��P�Ȃǂ���������B

�@�uRails 2.0�ŋC�ɓ����Ă���̂́ARESTful�̌�����Nj����ăA�v���P�[�V�����J�������a�I�ɂȂ����_���v��Ruby on Rails�쐬�҃f�r�b�h�E�n�C�l�}�C���[�E�n���\������eWEEK�Ɍ�����B�u����ɂ��A�A�v���P�[�V�����J�����\���”\�ŁA�N���[���ŁA�y���߂���̂Ɋ�������BHTTP�͏�ɂ���𐳂�������Ă����B�����Web�A�v���P�[�V�����J���҂�����𗝉����A�]������̂ɏ������Ԃ����������v

�@�n���\�����́A�ăV�J�S��Web���i�J�����37signals�̊J���ҁB������Rails 2.0�̊�����1�N��v�����ƌ��B

�@�����́A4�N��Rails�t���[�����[�N�Ɏ��g��ł���A����Ɠ������炢�̊��ԁA�J���ɎQ�����Ă���J���҂̒��j�O���[�v������ƌ��B���̉ߒ��Ő��S�l���v�����Ă��ꂽ�Ƃ����B�u����̃����[�X�́A��K�͂ȃI�[�v���\�[�X�J���̏������v

�@�ŐV�����[�X�ɂ͑����̐V�@�\�����荞�܂�Ă��邪�A�n���\�����́ARails 2.0�̍�Ƃ̑唼��REST�T�|�[�g�̒lj��ɔ�₳�ꂽ�Ɛ�������B�uRESTful�ȃ��C�t�X�^�C���ɂ��Ȃ�̉��ǂ��������v

�@����ɓ����͂��������B�uRails��SOAP�iSimple Object Access Protocol�j��REST�̋c�_�ŕЕ��̑��ɕt�������Ƃ͋�����Ȃ����낤�B�����̂��߂ɐ�΂�SOAP���g��Ȃ���΂Ȃ�Ȃ��A�Ƃ����̂łȂ���΁A�����͂������Ȃ����Ƃ��������߂�v

�@�Z�L�����e�B�������傫�Ȍ��O�����������B

�@�u�������Ă����ɁA�����ƊȒP�ɃZ�L���A�ȃA�v���P�[�V�������J���ł���悤�ɂ���̂͏�Ɋ�΂������Ƃ��BRails 2.0�ł́A��������낢��Ȗʂ���������Ă���v�ƃn���\�����͎��g�̃u���O�ŏq�ׂĂ���B�u�ł��d�v�Ȃ̂́ACSRF�i�N���X�T�C�g���N�G�X�g�t�H�[�W�F���j�U���ɑΉ�����������J�j�Y����񋟂��Ă��邱�Ƃ��B���ׂẴt�H�[����Ajax���N�G�X�g�ɓ��ʂȃg�[�N�����܂߂邱�ƂŁA�����̃A�v���P�[�V�����̊O������̃��N�G�X�g����h��ł���B�V����Rails 2.0�A�v���P�[�V�����ł͂��ꂪ���ׂăf�t�H���g�ŃI���ɂȂ�v

�@�n���\�����́ARails 2.0�͂܂��A�J���҂�XSS�i�N���X�T�C�g�X�N���v�e�B���O�j�U���ւ̑Ώ���e�Ղɂ��Ă���̂Ɠ����ɁA���[�U�[��HTML���y�[�W�ɖ��ߍ��߂�悤�ɂ��Ă���Ɛ�������B�uHTTP�I�����[��cookie�̃T�|�[�g��lj������B����͂܂����ׂẴu���E�U�ŃT�|�[�g����Ă���킯�ł͂Ȃ����A�ݒu����Ă���Ƃ���ł͎g����v

�@Rails 2.0��Action Pack��HTTP�Ƃ̐e�a�������߂邱�Ƃ�ڎw���Ă���Ɠ����͌����B�uHTTP Basic�F�؂ƘA�W����V���W���[����lj������B����́ASSL�o�R��API�F�؂����s����f���炵�����@���ƕ������Ă���v

�@����ɁARails 2.0�͐V�������N�G�X�g�v���t�@�C���������B�u���ۂɗ��p�����ꍇ�̃{�g���l�b�N���ǂ��ɂ���̂������‚��o���͓̂�����Ƃ�����B�����A���p�X�N���v�g�S�̂�ǐՂ��āA���̌��ʂ�񍐂ł���V�������N�G�X�g�v���t�@�C���ŁA����������Ɨe�Ղɂ����v�ƃn���\�����͌����B

�@�����́ARails�`�[���́A�ȑO����y�ʂ������J���t���[�����[�N���AActive Record�̃R���|�[�l���g�ȂNJ�‚��̂��̂��O�����Ƃł���Ɍy�������ƌ��BRails��Active Record�́A�r�W�l�X�I�u�W�F�N�g�ƃf�[�^�x�[�X�\���‚Ȃ��ŁA���W�b�N�ƃf�[�^��1�‚̃��b�s���O�ŕ\���ł��鎝���I�ȃh���C�����f�������o���B

�@�uActive Record�����������y�����邽�߂ɁA�wacts as XYZ�x�@�\���폜���āARails SVN�i�T�u�o�[�W�����j���|�W�g���̌X�̃v���O�C���ɓ��ꂽ�B�܂��A���ׂĂ̏��p�f�[�^�x�[�X�A�_�v�^�����ꂼ���gem�ɉ������񂾁B������ARails�͍��AMySQL�ASQLite�APostgreSQL�̃A�_�v�^�݂̂���������ԂŒ񋟂���Ă���B�����́A����ꂪ�ȒP�Ƀe�X�g�ł��A�ϋɓI�ɂ������Ă���f�[�^�x�[�X���v�i�����j

�@������Ƃ����āA���p�f�[�^�x�[�X���u������ɂ���Ă���킯�ł͂Ȃ��Ɠ����͌����B�u�ނ���A���C����Rails�f�B�X�g���r���[�V��������Ɨ����������[�X�X�P�W���[�������R�ɐݒ�ł���悤�ɂȂ����v

�@�܂�Rails 2.0�̐V���ȓ_�Ƃ��ẮA�uHTTP�ł�������̃t�@�C�������N�G�X�g���Ȃ��Ă��AJavaScript�ƃX�^�C���V�[�g�t�@�C����_�����j�b�g�ō\��������̂������ƊȒP�ɂȂ����v���Ƃ�����Ɠ����͌���Ă���B

�֘A�L�[���[�h

Ruby | �t���[�����[�N | Ajax | API


Editorial items that were originally published in the U.S. Edition of �geWEEK�h are the copyrighted property of Ziff Davis Enterprise Inc. Copyright (c) 2011. All Rights Reserved.

'; e_dlv.innerHTML = html; adRequest({position:dlv_pos,dom:true}); }else if(ad_type === 'gam'){ var html = '
'; e_dlv.innerHTML = html; refreshGam('InArtSpecialLink'); }else if(ad_type === 'logly'){ var html = '
'; e_dlv.innerHTML = html; loglySet(g_id); }else if(ad_type === 'google'){ var html = '
'; e_dlv.innerHTML = html; googletag.cmd.push(function(){ var slot8 = googletag.defineSlot('/43042345/nlab_artinsert_RT',[[336,280],[300,250],'fluid'],'div-gpt-ad-1551176482959-0').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.display('div-gpt-ad-1551176482959-0'); googletag.pubads().refresh([slot8]); }); } }; var insert_ok = function(_target,_str){ var clearfix = d.createElement('div'); clearfix.className = 'colBoxClear'; if(ad_float_fix){ e_body.insertBefore(e_dlv,_target); e_body.insertBefore(clearfix,_target.nextElementSibling); }else{ e_body.insertBefore(e_dlv,_target); } set_dlv(); }; var insert_ng = function(_str){ e_dlv.style.display = 'none'; }; var main = function(){ var e_nodes = e_body.childNodes; // BODY �����q�v�f var e_tags = []; // BODY �����^�O var p_num = []; // BODY ���� P �^�O�ʒu var p_target_num; // �g�}����ʒu var o_float = {}; // ��荞�ݗv�f var o_this = {}; // �A�N�e�B�u�^�O var o_next = {}; // �A�N�e�B�u�^�O�̎��̃^�O var flag_insert = 0; // �}���t���O // ��荞�ݗv�f�`�F�b�N var check_float = function(_e){ var e = 0; if(_e.id.match(/^col\d{3}(l|r)$/)){ e = _e; } return e; }; // �v�f�� Y ���W�ƍ����̍��v�l var get_element_y = function(_e){ var ey = 0; var eh = _e.offsetHeight; while(_e){ ey += _e.offsetTop; _e = _e.offsetParent; } return ey + eh; }; var check_ptag = function(_e){ var e = 0; if(_e.tagName && _e.tagName === 'P'){ e = _e; } return e; }; var try_insert = function(){ p_target_num = Math.floor(p_num.length / 2) - 1; if(p_target_num >= _maxrange) p_target_num = _maxrange; if(dis_con) p_target_num = 0; for(var i = p_num[p_target_num]; i < e_tags.length; i++){ o_this.e = check_ptag(e_tags[i]); if(o_this.e){ o_next.e = check_ptag(e_tags[i + 1]); if(o_next.e){ if(!o_float.e || check_float(e_tags[i - 1])){ o_float.e = check_float(e_tags[i - 1]); o_float.n = i - 1; } if(o_float.e && o_float.n < i + 1){ o_float.y = get_element_y(o_float.e); o_this.y = get_element_y(o_this.e); set_line(o_float.y,'red'); set_line(o_this.y,'blue'); if(o_float.y < o_this.y){ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂���'); break; } }else{ flag_insert = 1; insert_ok(o_next.e,_threshold + ' �p���ȏ��荞�݂Ȃ�'); break; } } }else{ o_float = {}; } } if(!flag_insert){ insert_ng('�}���ʒu�Ȃ�'); } }; // �S�q�v�f����^�O�̂ݔz��ɓ���� for(var i = 0; i < e_nodes.length; i++){ if(e_nodes[i].tagName){ e_tags.push(e_nodes[i]); } } // �S�^�O���� P �^�O�ʒu��z��ɓ���� for(var i = 0; i < e_tags.length; i++){ if(e_tags[i].tagName === 'P') p_num.push(i); // �ŏ��̉�荞�ݗv�f���i�[ if(!o_float.e){ o_float.e = check_float(e_tags[i]); o_float.y = get_element_y(o_float.e); o_float.n = i; } } if(p_num.length >= _threshold){ try_insert(); }else{ insert_ng('P �^�O ' + _threshold + ' �ȉ�'); } }; if(e_body){ main(); }else{ insert_ng('�L���{���Ȃ�'); } })(document,4,5);
���Ȃ��ɂ������߂̋L��PR